<?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>110367</bug_id>
          
          <creation_ts>2013-02-20 12:36:38 -0800</creation_ts>
          <short_desc>[Microdata] HTMLPropertiesCollection&apos;s names attribute must be live</short_desc>
          <delta_ts>2022-08-01 20:57:40 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>92986</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Arko Saha">arko</reporter>
          <assigned_to name="Arko Saha">arko</assigned_to>
          <cc>abarth</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>837658</commentid>
    <comment_count>0</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-20 12:36:38 -0800</bug_when>
    <thetext>The names attribute of HTMLPropertiesCollection must be live

Test:

&lt;div itemscope&gt;
&lt;span itemprop=&quot;foo&quot;&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;script&gt;
var item = document.getItems()[0];
var names = item.properties.names;
item.children[0].itemProp.add(&quot;bar&quot;);
document.write(names.length == 2 ? &quot;PASS&quot; : &quot;FAIL&quot;);
&lt;/script&gt;

Expected result: PASS
Actual result: FAIL as names.length returns 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837752</commentid>
    <comment_count>1</comment_count>
      <attachid>189376</attachid>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-20 14:20:15 -0800</bug_when>
    <thetext>Created attachment 189376
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837756</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 14:24:03 -0800</bug_when>
    <thetext>Attachment 189376 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-add-remove-itemref-expected.txt&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-add-remove-itemref.html&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-add-remove-itemscope-expected.txt&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-add-remove-itemscope.html&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-must-be-live-expected.txt&apos;, u&apos;LayoutTests/fast/dom/MicroData/names-property-must-be-live.html&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/dom/DOMStringList.h&apos;, u&apos;Source/WebCore/dom/DOMStringList.idl&apos;, u&apos;Source/WebCore/dom/MicroDataPropertyNames.cpp&apos;, u&apos;Source/WebCore/dom/MicroDataPropertyNames.h&apos;, u&apos;Source/WebCore/html/HTMLPropertiesCollection.cpp&apos;, u&apos;Source/WebCore/html/HTMLPropertiesCollection.h&apos;]&quot; exit_code: 1
Source/WebCore/dom/DOMStringList.h:53:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837770</commentid>
    <comment_count>3</comment_count>
      <attachid>189376</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-20 14:29:58 -0800</bug_when>
    <thetext>Comment on attachment 189376
proposed patch

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

&gt;&gt; Source/WebCore/dom/DOMStringList.h:53
&gt;&gt; +    virtual size_t length() const { return m_strings.size(); }
&gt;&gt; +    virtual String item(unsigned index) const;
&gt;&gt; +    virtual bool contains(const String&amp; str) const;
&gt; 
&gt; The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I&apos;m worried that this will regress performance. Can we avoid inheriting from DOMStringList in C++ side (we should to continue to inherit on IDL side)?

&gt; Source/WebCore/dom/MicroDataPropertyNames.cpp:76
&gt; +HTMLElement* MicroDataPropertyNames::itemAfter(HTMLElement* rootNode, Element* previous) const

It seems like all of this code is duplicated from HTMLPropertiesCollection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837778</commentid>
    <comment_count>4</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-20 14:41:41 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; I&apos;m worried that this will regress performance. Can we avoid inheriting from DOMStringList in C++ side (we should to continue to inherit on IDL side)?
&gt;

I am not sure if we can avoid inheriting from DOMStringList in C++ side. Can you please guide me how to do this by inheriting on IDL side?
 
&gt; &gt; Source/WebCore/dom/MicroDataPropertyNames.cpp:76
&gt; &gt; +HTMLElement* MicroDataPropertyNames::itemAfter(HTMLElement* rootNode, Element* previous) const
&gt; 
&gt; It seems like all of this code is duplicated from HTMLPropertiesCollection?

Yes, I have moved virtualItemAfter(), updateNameCache() and nextNodeWithProperty() methods from HTMLPropertiesCollection to MicroDataPropertyNames. Also renamed virtualItemAfter() to itemAfter().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838631</commentid>
    <comment_count>5</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-21 11:30:03 -0800</bug_when>
    <thetext>&gt; Can we avoid inheriting from DOMStringList in C++ side (we should to continue to inherit on IDL side)?

haraken do you have any thoughts how this can be achieved?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838638</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-21 11:38:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Can we avoid inheriting from DOMStringList in C++ side (we should to continue to inherit on IDL side)?
&gt; 
&gt; haraken do you have any thoughts how this can be achieved?

Do you really need to inherit DOMStringList from MicroDataPropertyNames? For example, wouldn&apos;t it be possible to avoid the inheritance like this?

class MicroDataPropertyNames {

  size_t length() { return stringList-&gt;length(); }

  OwnPtr&lt;DOMStringList&gt; stringList;
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839016</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-21 16:48:09 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Can we avoid inheriting from DOMStringList in C++ side (we should to continue to inherit on IDL side)?
&gt; 
&gt; haraken do you have any thoughts how this can be achieved?

I don&apos;t think you need to do anything special. Just not inherit in C++ but still inherit in IDL. There&apos;s nothing that mandates C++/IDL inherence trees to match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839265</commentid>
    <comment_count>8</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-21 23:02:00 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; 
&gt; I don&apos;t think you need to do anything special. Just not inherit in C++ but still inherit in IDL. There&apos;s nothing that mandates C++/IDL inherence trees to match.

I tried to inherit only in IDL side. Below JS binding code is generated in JSMicroDataPropertyNames.cpp :

JSValue jsMicroDataPropertyNamesLength(ExecState* exec, JSValue slotBase, PropertyName)
{
    JSMicroDataPropertyNames* castedThis = jsCast&lt;JSMicroDataPropertyNames*&gt;(asObject(slotBase));
    UNUSED_PARAM(exec);
    MicroDataPropertyNames* impl = static_cast&lt;MicroDataPropertyNames*&gt;(castedThis-&gt;impl());
    JSValue result = jsNumber(impl-&gt;length());
    return result;
}

Here it is giving compilation error like :
DerivedSources/WebCore/JSMicroDataPropertyNames.cpp:181:91: error: invalid static_cast from type &apos;WebCore::DOMStringList*&apos; to type &apos;WebCore::MicroDataPropertyNames*&apos;
As MicroDataPropertyNames is not inherited from DOMStringList in C++ side. Please note that castedThis-&gt;impl() returns DOMStringList in this case.

JSMicroDataPropertyNames::JSMicroDataPropertyNames(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr&lt;MicroDataPropertyNames&gt; impl)
    : JSDOMStringList(structure, globalObject, impl)
{
}

This causes below error as JSDOMStringList takes PassRefPtr&lt;DOMStringList&gt; as third parameter 
JSDOMStringList(JSC::Structure*, JSDOMGlobalObject*, PassRefPtr&lt;DOMStringList&gt;);

../../Source/WTF/wtf/PassRefPtr.h: In instantiation of &apos;WTF::PassRefPtr&lt;T&gt;::PassRefPtr(const WTF::PassRefPtr&lt;U&gt;&amp;) [with U = WebCore::MicroDataPropertyNames; T = WebCore::DOMStringList]&apos;:
DerivedSources/WebCore/JSMicroDataPropertyNames.cpp:113:52:   required from here
../../Source/WTF/wtf/PassRefPtr.h:66:84: error: cannot convert &apos;WebCore::MicroDataPropertyNames*&apos; to &apos;WebCore::DOMStringList*&apos; in initialization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839272</commentid>
    <comment_count>9</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2013-02-21 23:10:35 -0800</bug_when>
    <thetext>Also tried with &quot;JSGenerateToNativeObject&quot; IDL attribute which generates to below JS binding code:
MicroDataPropertyNames* impl() const
{
    return static_cast&lt;MicroDataPropertyNames*&gt;(Base::impl());
}

Still same error: invalid static_cast from type &apos;WebCore::DOMStringList*&apos; to type &apos;WebCore::MicroDataPropertyNames*&apos;

Can you please point me out if I am missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976945</commentid>
    <comment_count>10</comment_count>
      <attachid>189376</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-05 11:11:42 -0800</bug_when>
    <thetext>Comment on attachment 189376
proposed patch

Clearing review flag on patches from before 2014. If this patch is still relevant, please reset the r? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1888205</commentid>
    <comment_count>11</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-01 14:25:13 -0700</bug_when>
    <thetext>MicroData was removed here:

https://github.com/WebKit/WebKit/commit/cd0400986f42a280613126c60e2ffe028ae6c7aa

Do we need this? Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189376</attachid>
            <date>2013-02-20 14:20:15 -0800</date>
            <delta_ts>2014-02-05 11:11:42 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug-110367-20130220141250.patch</filename>
            <type>text/plain</type>
            <size>33602</size>
            <attacher name="Arko Saha">arko</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAyLTIwICBBcmtvIFNh
aGEgIDxhcmtvQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbTWljcm9kYXRhXSBIVE1MUHJvcGVy
dGllc0NvbGxlY3Rpb24ncyBuYW1lcyBhdHRyaWJ1dGUgbXVzdCBiZSBsaXZlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBjbGFzcyBN
aWNyb0RhdGFQcm9wZXJ0eU5hbWVzLCBpdCBvdmVycmlkZXMgbGVuZ3RoKCksCisgICAgICAgIGl0
ZW0oKSBhbmQgY29udGFpbigpIG1ldGhvZCBvZiBET01TdHJpbmdMaXN0LgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2RvbS9NaWNyb0RhdGEvbmFtZXMtcHJvcGVydHktYWRkLXJlbW92ZS1pdGVtcmVm
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1h
ZGQtcmVtb3ZlLWl0ZW1zY29wZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9NaWNyb0Rh
dGEvbmFtZXMtcHJvcGVydHktbXVzdC1iZS1saXZlLmh0bWwKKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogZG9tL0RPTVN0cmluZ0xpc3QuaDogTWFkZSBsZW5n
dGgoKSwgaXRlbSgpIGFuZCBjb250YWlucygpIG1ldGhvZHMKKyAgICAgICAgYXMgdmlydHVhbC4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6Omxlbmd0aCk6CisgICAgICAgIChET01T
dHJpbmdMaXN0KTogTWFkZSB0aGUgY29uc3RydWN0b3IgYXMgcHJvdGVjdGVkLCBzbyB0aGF0IHdl
IGNhbgorICAgICAgICBvdmVycmlkZSBsZW5ndGgoKSwgaXRlbSgpIGFuZCBjb250YWlucygpIG1l
dGhvZHMuCisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0Ojp+RE9NU3RyaW5nTGlzdCk6
IEFkZGVkIHZpcnR1YWwgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5p
ZGw6CisgICAgICAgICogZG9tL01pY3JvRGF0YVByb3BlcnR5TmFtZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRhUHJvcGVydHlOYW1l
czo6TWljcm9EYXRhUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNaWNyb0RhdGFQ
cm9wZXJ0eU5hbWVzOjp+TWljcm9EYXRhUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzOjp1cGRhdGVSZWZFbGVtZW50Q2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6TWlj
cm9EYXRhUHJvcGVydHlOYW1lczo6aXRlbUFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3Jv
RGF0YVByb3BlcnR5TmFtZXM6OnVwZGF0ZVByb3BlcnR5TmFtZXNDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29y
ZTo6TWljcm9EYXRhUHJvcGVydHlOYW1lczo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNaWNy
b0RhdGFQcm9wZXJ0eU5hbWVzOjpjb250YWlucyk6CisgICAgICAgICogZG9tL01pY3JvRGF0YVBy
b3BlcnR5TmFtZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1pY3Jv
RGF0YVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRhUHJvcGVydHlO
YW1lczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YVByb3BlcnR5TmFtZXM6
OmludmFsaWRhdGVDYWNoZSk6IEludmFpbGRhdGUgcHJvcGVydHlOYW1lCisgICAgICAgIGNhY2hl
IHdoZW4gZG9tIHRyZWUgbW9kaWZpZWQuCisgICAgICAgICogaHRtbC9IVE1MUHJvcGVydGllc0Nv
bGxlY3Rpb24uY3BwOiBNb3ZlZCB2aXJ0dWFsSXRlbUFmdGVyKCksCisgICAgICAgIHVwZGF0ZU5h
bWVDYWNoZSgpIGFuZCBuZXh0Tm9kZVdpdGhQcm9wZXJ0eSgpIG1ldGhvZHMgdG8KKyAgICAgICAg
TWljcm9EYXRhUHJvcGVydHlOYW1lcworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246OnZpcnR1YWxJdGVtQWZ0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOjpuYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246Omhhc05hbWVkSXRlbSk6CisgICAgICAg
ICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b246OmludmFsaWRhdGVDYWNoZSk6CisKIDIwMTMtMDItMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxNDM0NDEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQzNTAzKQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExOTMsNiAr
MTE5Myw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vTWVzc2FnZVBvcnRDaGFubmVs
LmNwcAogICAgIGRvbS9NZXNzYWdlUG9ydC5jcHAKICAgICBkb20vTWljcm9EYXRhSXRlbUxpc3Qu
Y3BwCisgICAgZG9tL01pY3JvRGF0YVByb3BlcnR5TmFtZXMuY3BwCiAgICAgZG9tL01vdXNlRXZl
bnQuY3BwCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAgIGRvbS9NdXRhdGlvbkV2
ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDM1
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTE2LDYgKzI5MTYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRl
bUxpc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRlbUxpc3QuaCBcCisJ
U291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YVByb3BlcnR5TmFtZXMuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9kb20vTWljcm9EYXRhUHJvcGVydHlOYW1lcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmggXAog
CVNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgXApJbmRleDogU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCShyZXZpc2lvbiAxNDM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjcsNiArNDI3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL01lc3Nh
Z2VQb3J0LmNwcCBcCiAgICAgZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAogICAgIGRvbS9N
aWNyb0RhdGFJdGVtTGlzdC5jcHAgXAorICAgIGRvbS9NaWNyb0RhdGFQcm9wZXJ0eU5hbWVzLmNw
cCBcCiAgICAgZG9tL01vdXNlRXZlbnQuY3BwIFwKICAgICBkb20vTW91c2VSZWxhdGVkRXZlbnQu
Y3BwIFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXApAQCAtMTY1Nyw2ICsxNjU4LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oIFwKICAgICBkb20vTWVz
c2FnZVBvcnQuaCBcCiAgICAgZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmggXAorICAgIGRvbS9NaWNy
b0RhdGFQcm9wZXJ0eU5hbWVzLmggXAogICAgIGRvbS9Nb3VzZUV2ZW50LmggXAogICAgIGRvbS9N
b3VzZVJlbGF0ZWRFdmVudC5oIFwKICAgICBkb20vTXV0YXRpb25DYWxsYmFjay5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDE0MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg3Miw2ICsyODcyLDggQEAKICAgICAgICAgICAg
ICdkb20vTWVzc2FnZVBvcnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAnZG9tL01pY3JvRGF0
YUl0ZW1MaXN0LmNwcCcsCiAgICAgICAgICAgICAnZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmgnLAor
ICAgICAgICAgICAgJ2RvbS9NaWNyb0RhdGFQcm9wZXJ0eU5hbWVzLmNwcCcsCisgICAgICAgICAg
ICAnZG9tL01pY3JvRGF0YVByb3BlcnR5TmFtZXMuaCcsCiAgICAgICAgICAgICAnZG9tL01vdXNl
RXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwJywKICAg
ICAgICAgICAgICdkb20vTXV0YXRpb25DYWxsYmFjay5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxNDM1MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtNTMyMDcsNiArNTMyMDcsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1pY3JvRGF0YVByb3BlcnR5TmFtZXMuY3BwIgorCQkJ
CT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0Fs
bHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTWljcm9EYXRhUHJvcGVydHlOYW1lcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTW91c2VFdmVudC5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCShyZXZp
c2lvbiAxNDM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxNSArNDgsMTggQEAgcHVibGljOgogICAgIHZvaWQgc29ydCgpOwog
CiAgICAgLy8gSW1wbGVtZW50cyB0aGUgSURMLgotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ3Muc2l6ZSgpOyB9Ci0gICAgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0Owor
ICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5ncy5zaXpl
KCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0OwogCiAgICAg
b3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmluZz4mKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdz
OyB9CiAKLXByaXZhdGU6CisgICAgdmlydHVhbCB+RE9NU3RyaW5nTGlzdCgpIHsgfQorCitwcm90
ZWN0ZWQ6CiAgICAgRE9NU3RyaW5nTGlzdCgpIHsgfQogCitwcml2YXRlOgogICAgIFZlY3RvcjxT
dHJpbmc+IG1fc3RyaW5nczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJp
bmdMaXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlz
dC5pZGwJKHJldmlzaW9uIDE0MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdM
aXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICAgIEluZGV4ZWRHZXR0
ZXIsCiAgICAgSlNDdXN0b21Ub05hdGl2ZU9iamVjdCwKICAgICBKU05vU3RhdGljVGFibGVzLAot
ICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKKyAgICBWOFNraXBWVGFibGVWYWxpZGF0aW9u
CiBdIGludGVyZmFjZSBET01TdHJpbmdMaXN0IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsZW5ndGg7CiAgICAgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0g
RE9NU3RyaW5nIGl0ZW0oaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQg
bG9uZyBpbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhUHJvcGVydHlO
YW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YVByb3Bl
cnR5TmFtZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0
YVByb3BlcnR5TmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEzIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgor
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vcgorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAqIGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQKKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1JQ1JPREFUQSkKKworI2luY2x1
ZGUgIk1pY3JvRGF0YVByb3BlcnR5TmFtZXMuaCIKKworI2luY2x1ZGUgIkRPTVNldHRhYmxlVG9r
ZW5MaXN0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01pY3JvRGF0YVByb3BlcnR5TmFtZXM6Ok1p
Y3JvRGF0YVByb3BlcnR5TmFtZXMoTm9kZSogb3duZXJOb2RlKQorICAgIDogRE9NU3RyaW5nTGlz
dCgpCisgICAgLCBtX2lzUHJvcGVydHlOYW1lc0NhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2lz
SXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZChmYWxzZSkKKyAgICAsIG1fb3duZXJOb2RlKG93bmVy
Tm9kZSkKK3sKK30KKworTWljcm9EYXRhUHJvcGVydHlOYW1lczo6fk1pY3JvRGF0YVByb3BlcnR5
TmFtZXMoKQoreworfQorCit2b2lkIE1pY3JvRGF0YVByb3BlcnR5TmFtZXM6OnVwZGF0ZVJlZkVs
ZW1lbnRDYWNoZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZh
bGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2l0ZW1SZWZFbGVtZW50c0NhY2hlLmNsZWFy
KCk7CisgICAgbV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQgPSB0cnVlOworICAgIHRvSFRN
TEVsZW1lbnQobV9vd25lck5vZGUuZ2V0KCkpLT5nZXRJdGVtUmVmRWxlbWVudHMobV9pdGVtUmVm
RWxlbWVudHNDYWNoZSk7Cit9CisKK3N0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhQcm9wZXJ0eShO
b2RlKiByb290Tm9kZSwgTm9kZSogcHJldmlvdXMsIE5vZGUqIG93bmVyTm9kZSkKK3sKKyAgICAv
LyBBbiBNaWNyb2RhdGEgaXRlbSBtYXkgY29udGFpbiBwcm9wZXJ0aWVzIHdoaWNoIGluIHR1cm4g
YXJlIGl0ZW1zIHRoZW1zZWx2ZXMuIFByb3BlcnRpZXMgY2FuCisgICAgLy8gYWxzbyB0aGVtc2Vs
dmVzIGJlIGdyb3VwcyBvZiBuYW1lLXZhbHVlIHBhaXJzLCBieSBwdXR0aW5nIHRoZSBpdGVtc2Nv
cGUgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50CisgICAgLy8gdGhhdCBkZWNsYXJlcyB0aGUgcHJv
cGVydHkuIElmIHRoZSBwcm9wZXJ0eSBoYXMgYW4gaXRlbXNjb3BlIGF0dHJpYnV0ZSBzcGVjaWZp
ZWQgdGhlbiB3ZSBuZWVkCisgICAgLy8gdG8gdHJhdmVyc2UgdGhlIG5leHQgc2libGluZy4KKyAg
ICByZXR1cm4gcHJldmlvdXMgPT0gb3duZXJOb2RlIHx8IChwcmV2aW91cy0+aXNIVE1MRWxlbWVu
dCgpICYmICF0b0hUTUxFbGVtZW50KHByZXZpb3VzKS0+ZmFzdEhhc0F0dHJpYnV0ZShIVE1MTmFt
ZXM6Oml0ZW1zY29wZUF0dHIpKQorICAgICAgICA/IE5vZGVUcmF2ZXJzYWw6Om5leHQocHJldmlv
dXMsIHJvb3ROb2RlKQorICAgICAgICA6IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHByZXZpb3VzLCByb290Tm9kZSk7Cit9CisKK0hUTUxFbGVtZW50KiBNaWNyb0RhdGFQcm9w
ZXJ0eU5hbWVzOjppdGVtQWZ0ZXIoSFRNTEVsZW1lbnQqIHJvb3ROb2RlLCBFbGVtZW50KiBwcmV2
aW91cykgY29uc3QKK3sKKyAgICBOb2RlKiBjdXJyZW50OworICAgIGN1cnJlbnQgPSBwcmV2aW91
cyA/IG5leHROb2RlV2l0aFByb3BlcnR5KHJvb3ROb2RlLCBwcmV2aW91cywgbV9vd25lck5vZGUu
Z2V0KCkpIDogcm9vdE5vZGU7CisKKyAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHRO
b2RlV2l0aFByb3BlcnR5KHJvb3ROb2RlLCBjdXJyZW50LCBtX293bmVyTm9kZS5nZXQoKSkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQgPT0gbV9vd25lck5vZGUuZ2V0KCkgfHwgIWN1cnJlbnQtPmlz
SFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRWxlbWVu
dCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudCk7CisgICAgICAgIGlmIChlbGVtZW50
LT5mYXN0SGFzQXR0cmlidXRlKEhUTUxOYW1lczo6aXRlbXByb3BBdHRyKSAmJiBlbGVtZW50LT5p
dGVtUHJvcCgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCit2b2lkIE1pY3JvRGF0YVByb3BlcnR5TmFtZXM6OnVwZGF0
ZVByb3BlcnR5TmFtZXNDYWNoZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNQcm9wZXJ0eU5hbWVz
Q2FjaGVWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWljcm9EYXRhUHJvcGVydHlOYW1l
cyogcHJvcGVydHlOYW1lcyA9IGNvbnN0X2Nhc3Q8TWljcm9EYXRhUHJvcGVydHlOYW1lcyo+KHRo
aXMpOworICAgIHByb3BlcnR5TmFtZXMtPmNsZWFyKCk7CisKKyAgICB1cGRhdGVSZWZFbGVtZW50
Q2FjaGUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW1SZWZFbGVtZW50
c0NhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiByZWZFbGVtZW50ID0g
bV9pdGVtUmVmRWxlbWVudHNDYWNoZVtpXTsKKyAgICAgICAgZm9yIChIVE1MRWxlbWVudCogZWxl
bWVudCA9IGl0ZW1BZnRlcihyZWZFbGVtZW50LCAwKTsgZWxlbWVudDsgZWxlbWVudCA9IGl0ZW1B
ZnRlcihyZWZFbGVtZW50LCBlbGVtZW50KSkgeworICAgICAgICAgICAgRE9NU2V0dGFibGVUb2tl
bkxpc3QqIGl0ZW1Qcm9wZXJ0eSA9IGVsZW1lbnQtPml0ZW1Qcm9wKCk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgaXRlbVByb3Bl
cnR5LT5sZW5ndGgoKTsgKytwcm9wZXJ0eUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFE
T01TdHJpbmdMaXN0Ojpjb250YWlucyhpdGVtUHJvcGVydHktPml0ZW0ocHJvcGVydHlJbmRleCkp
KQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLT5hcHBlbmQoaXRlbVByb3BlcnR5
LT5pdGVtKHByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIG1faXNQcm9wZXJ0eU5hbWVzQ2FjaGVWYWxpZCA9IHRydWU7Cit9CisKK3NpemVfdCBN
aWNyb0RhdGFQcm9wZXJ0eU5hbWVzOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbV9pc1By
b3BlcnR5TmFtZXNDYWNoZVZhbGlkKQorICAgICAgICB1cGRhdGVQcm9wZXJ0eU5hbWVzQ2FjaGUo
KTsKKyAgICByZXR1cm4gRE9NU3RyaW5nTGlzdDo6bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBNaWNy
b0RhdGFQcm9wZXJ0eU5hbWVzOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlm
ICghbV9pc1Byb3BlcnR5TmFtZXNDYWNoZVZhbGlkKQorICAgICAgICB1cGRhdGVQcm9wZXJ0eU5h
bWVzQ2FjaGUoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nTGlzdDo6aXRlbShpbmRleCk7CisKK30K
KworYm9vbCBNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzOjpjb250YWlucyhjb25zdCBTdHJpbmcmIHN0
cmluZykgY29uc3QKK3sKKyAgICBpZiAoIW1faXNQcm9wZXJ0eU5hbWVzQ2FjaGVWYWxpZCkKKyAg
ICAgICAgdXBkYXRlUHJvcGVydHlOYW1lc0NhY2hlKCk7CisgICAgcmV0dXJuIERPTVN0cmluZ0xp
c3Q6OmNvbnRhaW5zKHN0cmluZyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNSUNST0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9E
YXRhUHJvcGVydHlOYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NaWNy
b0RhdGFQcm9wZXJ0eU5hbWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TWljcm9EYXRhUHJvcGVydHlOYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorICogYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE1pY3JvRGF0YVByb3BlcnR5TmFtZXNfaAorI2RlZmluZSBNaWNyb0Rh
dGFQcm9wZXJ0eU5hbWVzX2gKKworI2lmIEVOQUJMRShNSUNST0RBVEEpCisKKyNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzIDogcHVibGljIERPTVN0cmlu
Z0xpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1pY3JvRGF0YVByb3BlcnR5
TmFtZXM+IGNyZWF0ZShOb2RlKiBvd25lck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1pY3JvRGF0YVByb3BlcnR5TmFtZXMob3duZXJOb2RlKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+TWljcm9EYXRhUHJvcGVydHlOYW1lcygpOworCisgICAgdmlydHVhbCBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNp
Z25lZCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYpIGNvbnN0IE9WRVJSSURFOworCisgICAgSFRNTEVsZW1lbnQqIGl0ZW1BZnRlcihIVE1M
RWxlbWVudCosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG1faXNQcm9wZXJ0eU5hbWVzQ2FjaGVWYWxpZCA9IGZhbHNl
OworICAgICAgICBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzKE5vZGUqKTsKKworICAgIHZv
aWQgdXBkYXRlUmVmRWxlbWVudENhY2hlKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVQcm9wZXJ0
eU5hbWVzQ2FjaGUoKSBjb25zdDsKKworICAgIG11dGFibGUgdW5zaWduZWQgbV9pc1Byb3BlcnR5
TmFtZXNDYWNoZVZhbGlkIDogMTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faXNJdGVtUmVmRWxl
bWVudHNDYWNoZVZhbGlkIDogMTsKKyAgICBtdXRhYmxlIFZlY3RvcjxIVE1MRWxlbWVudCo+IG1f
aXRlbVJlZkVsZW1lbnRzQ2FjaGU7CisgICAgUmVmUHRyPE5vZGU+IG1fb3duZXJOb2RlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1JQ1JPREFUQSkK
KworI2VuZGlmIC8vIE1pY3JvRGF0YVByb3BlcnR5TmFtZXNfaApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTQz
NTAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwyMSArNjksMTAgQEAgdm9pZCBIVE1MUHJvcGVydGllc0Nv
bGxlY3Rpb246OnVwZGF0ZVJlZgogICAgIHRvSFRNTEVsZW1lbnQob3duZXJOb2RlKCkpLT5nZXRJ
dGVtUmVmRWxlbWVudHMobV9pdGVtUmVmRWxlbWVudHMpOwogfQogCi1zdGF0aWMgTm9kZSogbmV4
dE5vZGVXaXRoUHJvcGVydHkoTm9kZSogcm9vdE5vZGUsIE5vZGUqIHByZXZpb3VzLCBOb2RlKiBv
d25lck5vZGUpCi17Ci0gICAgLy8gQW4gTWljcm9kYXRhIGl0ZW0gbWF5IGNvbnRhaW4gcHJvcGVy
dGllcyB3aGljaCBpbiB0dXJuIGFyZSBpdGVtcyB0aGVtc2VsdmVzLiBQcm9wZXJ0aWVzIGNhbgot
ICAgIC8vIGFsc28gdGhlbXNlbHZlcyBiZSBncm91cHMgb2YgbmFtZS12YWx1ZSBwYWlycywgYnkg
cHV0dGluZyB0aGUgaXRlbXNjb3BlIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudAotICAgIC8vIHRo
YXQgZGVjbGFyZXMgdGhlIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkgaGFzIGFuIGl0ZW1zY29w
ZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZW4gd2UgbmVlZAotICAgIC8vIHRvIHRyYXZlcnNlIHRo
ZSBuZXh0IHNpYmxpbmcuCi0gICAgcmV0dXJuIHByZXZpb3VzID09IG93bmVyTm9kZSB8fCAocHJl
dmlvdXMtPmlzSFRNTEVsZW1lbnQoKSAmJiAhdG9IVE1MRWxlbWVudChwcmV2aW91cyktPmZhc3RI
YXNBdHRyaWJ1dGUoaXRlbXNjb3BlQXR0cikpCi0gICAgICAgID8gTm9kZVRyYXZlcnNhbDo6bmV4
dChwcmV2aW91cywgcm9vdE5vZGUpCi0gICAgICAgIDogTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4ocHJldmlvdXMsIHJvb3ROb2RlKTsKLX0KLQogRWxlbWVudCogSFRNTFByb3Bl
cnRpZXNDb2xsZWN0aW9uOjp2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVkJiBvZmZzZXRJbkFycmF5
LCBFbGVtZW50KiBwcmV2aW91c0l0ZW0pIGNvbnN0CiB7CiAgICAgd2hpbGUgKG9mZnNldEluQXJy
YXkgPCBtX2l0ZW1SZWZFbGVtZW50cy5zaXplKCkpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQqIG5l
eHQgPSB2aXJ0dWFsSXRlbUFmdGVyKG1faXRlbVJlZkVsZW1lbnRzW29mZnNldEluQXJyYXldLCBw
cmV2aW91c0l0ZW0pKQorICAgICAgICBpZiAoRWxlbWVudCogbmV4dCA9IG5hbWVzKCktPml0ZW1B
ZnRlcihtX2l0ZW1SZWZFbGVtZW50c1tvZmZzZXRJbkFycmF5XSwgcHJldmlvdXNJdGVtKSkKICAg
ICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgICBvZmZzZXRJbkFycmF5Kys7CiAgICAgICAg
IHByZXZpb3VzSXRlbSA9IDA7CkBAIC05MSw0OCArODAsMTAgQEAgRWxlbWVudCogSFRNTFByb3Bl
cnRpZXNDb2xsZWN0aW9uOjp2aXJ0dQogICAgIHJldHVybiAwOwogfQogCi1IVE1MRWxlbWVudCog
SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOjp2aXJ0dWFsSXRlbUFmdGVyKEhUTUxFbGVtZW50KiBy
b290Tm9kZSwgRWxlbWVudCogcHJldmlvdXMpIGNvbnN0Ci17Ci0gICAgTm9kZSogY3VycmVudDsK
LSAgICBOb2RlKiBvd25lck5vZGUgPSB0aGlzLT5vd25lck5vZGUoKTsKLSAgICBjdXJyZW50ID0g
cHJldmlvdXMgPyBuZXh0Tm9kZVdpdGhQcm9wZXJ0eShyb290Tm9kZSwgcHJldmlvdXMsIG93bmVy
Tm9kZSkgOiByb290Tm9kZTsKLQotICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dE5v
ZGVXaXRoUHJvcGVydHkocm9vdE5vZGUsIGN1cnJlbnQsIG93bmVyTm9kZSkpIHsKLSAgICAgICAg
aWYgKGN1cnJlbnQgPT0gb3duZXJOb2RlIHx8ICFjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hU
TUxFbGVtZW50KGN1cnJlbnQpOwotICAgICAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0
ZShpdGVtcHJvcEF0dHIpICYmIGVsZW1lbnQtPml0ZW1Qcm9wKCktPmxlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkg
Y29uc3QKK1Bhc3NSZWZQdHI8TWljcm9EYXRhUHJvcGVydHlOYW1lcz4gSFRNTFByb3BlcnRpZXND
b2xsZWN0aW9uOjpuYW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc05hbWVDYWNoZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVSZWZFbGVtZW50cygpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faXRlbVJlZkVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEhUTUxFbGVtZW50KiByZWZFbGVtZW50ID0gbV9pdGVtUmVmRWxlbWVudHNbaV07Ci0gICAgICAg
IGZvciAoSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB2aXJ0dWFsSXRlbUFmdGVyKHJlZkVsZW1lbnQs
IDApOyBlbGVtZW50OyBlbGVtZW50ID0gdmlydHVhbEl0ZW1BZnRlcihyZWZFbGVtZW50LCBlbGVt
ZW50KSkgewotICAgICAgICAgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1Qcm9wZXJ0eSA9
IGVsZW1lbnQtPml0ZW1Qcm9wKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5
SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgaXRlbVByb3BlcnR5LT5sZW5ndGgoKTsgKytwcm9w
ZXJ0eUluZGV4KQotICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q2FjaGUoaXRlbVByb3Bl
cnR5LT5pdGVtKHByb3BlcnR5SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNldEhh
c05hbWVDYWNoZSgpOwotfQotCi1QYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IEhUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbjo6bmFtZXMoKSBjb25zdAotewotICAgIHVwZGF0ZU5hbWVDYWNoZSgpOwog
ICAgIGlmICghbV9wcm9wZXJ0eU5hbWVzKQotICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gTWljcm9EYXRh
UHJvcGVydHlOYW1lczo6Y3JlYXRlKG93bmVyTm9kZSgpKTsKICAgICByZXR1cm4gbV9wcm9wZXJ0
eU5hbWVzOwogfQogCkBAIC0xNDMsMTAgKzk0LDkgQEAgUGFzc1JlZlB0cjxQcm9wZXJ0eU5vZGVM
aXN0PiBIVE1MUHJvcGVydAogCiBib29sIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6aGFzTmFt
ZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICB1cGRhdGVOYW1l
Q2FjaGUoKTsKLSAgICBpZiAobV9wcm9wZXJ0eU5hbWVzKQotICAgICAgICByZXR1cm4gbV9wcm9w
ZXJ0eU5hbWVzLT5jb250YWlucyhuYW1lKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X3Byb3BlcnR5TmFtZXMpCisgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IE1pY3JvRGF0YVByb3Bl
cnR5TmFtZXM6OmNyZWF0ZShvd25lck5vZGUoKSk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1l
cy0+Y29udGFpbnMobmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaAkocmV2aXNp
b24gMTQzNTAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogCiAjaWYgRU5BQkxFKE1JQ1JP
REFUQSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVj
dGlvbi5oIgorI2luY2x1ZGUgIk1pY3JvRGF0YVByb3BlcnR5TmFtZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00NywzNSArNDcsMjQgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRh
dGVSZWZFbGVtZW50cygpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBu
YW1lcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8TWljcm9EYXRhUHJvcGVydHlOYW1lcz4gbmFt
ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gcHJv
cGVydHlOb2RlTGlzdChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdm9p
ZCBpbnZhbGlkYXRlQ2FjaGUoKSBjb25zdAogICAgIHsKICAgICAgICAgbV9pdGVtUmVmRWxlbWVu
dHMuY2xlYXIoKTsKLSAgICAgICAgbV9wcm9wZXJ0eU5hbWVzLmNsZWFyKCk7CisgICAgICAgIGlm
IChtX3Byb3BlcnR5TmFtZXMpCisgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMtPmludmFsaWRh
dGVDYWNoZSgpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24oTm9kZSopOwogCiAgICAgdmlydHVhbCBFbGVtZW50KiB2aXJ0dWFsSXRlbUFmdGVyKHVuc2ln
bmVkJiBvZmZzZXRJbkFycmF5LCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7Ci0gICAgSFRNTEVs
ZW1lbnQqIHZpcnR1YWxJdGVtQWZ0ZXIoSFRNTEVsZW1lbnQqIGJhc2UsIEVsZW1lbnQqIHByZXZp
b3VzKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlTmFtZUNhY2hlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHVwZGF0ZVByb3BlcnR5Q2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJvcGVydHlOYW1lcykKLSAgICAgICAgICAg
IG1fcHJvcGVydHlOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIGlm
ICghbV9wcm9wZXJ0eU5hbWVzLT5jb250YWlucyhwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAg
bV9wcm9wZXJ0eU5hbWVzLT5hcHBlbmQocHJvcGVydHlOYW1lKTsKLSAgICB9CiAKICAgICBtdXRh
YmxlIFZlY3RvcjxIVE1MRWxlbWVudCo+IG1faXRlbVJlZkVsZW1lbnRzOwotICAgIG11dGFibGUg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fcHJvcGVydHlOYW1lczsKKyAgICBtdXRhYmxlIFJlZlB0
cjxNaWNyb0RhdGFQcm9wZXJ0eU5hbWVzPiBtX3Byb3BlcnR5TmFtZXM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDM1MDMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMy0wMi0yMCAg
QXJrbyBTYWhhICA8YXJrb0Btb3Rvcm9sYS5jb20+CisKKyAgICAgICAgW01pY3JvZGF0YV0gSFRN
TFByb3BlcnRpZXNDb2xsZWN0aW9uJ3MgbmFtZXMgYXR0cmlidXRlIG11c3QgYmUgbGl2ZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMg
dG8gdmVyaWZ5IHRoYXQgbmFtZXMgcHJvcGVydHkgb2YgSFRNTFByb3Blcmllc0NvbGxlY3Rpb24g
bXVzdCBiZSBsaXZlLgorCisgICAgICAgICogZmFzdC9kb20vTWljcm9EYXRhL25hbWVzLXByb3Bl
cnR5LWFkZC1yZW1vdmUtaXRlbXJlZi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1yZWYuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vTWljcm9EYXRhL25hbWVzLXByb3BlcnR5LWFkZC1y
ZW1vdmUtaXRlbXNjb3BlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
TWljcm9EYXRhL25hbWVzLXByb3BlcnR5LWFkZC1yZW1vdmUtaXRlbXNjb3BlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1tdXN0LWJlLWxp
dmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9NaWNyb0RhdGEvbmFt
ZXMtcHJvcGVydHktbXVzdC1iZS1saXZlLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAyLTIwICBJYW4g
Vm9sbGljayA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbnJl
dmlld2VkIGdhcmRlbmluZy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9u
YW1lcy1wcm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1yZWYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1hZGQtcmVt
b3ZlLWl0ZW1yZWYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vTWljcm9EYXRhL25hbWVzLXByb3BlcnR5LWFkZC1yZW1vdmUtaXRlbXJlZi1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorVGhpcyB0ZXN0cyB0aGF0IG9u
IGNoYW5naW5nIGl0ZW1SZWYgbXVzdCB1cGRhdGUgbmFtZXMgcHJvcGVydHkuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitDcmVhdGVkIGVsZW1lbnQgb2YgdHlwZTogZGl2CitQQVNT
IG5hbWVzLmxlbmd0aCBpcyAwCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAxCitQQVNTIG5hbWVzWzBd
IGlzICJmb28iCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAwCitQQVNTIG5hbWVzWzBdIGlzIHVuZGVm
aW5lZC4KK1BBU1Mgc3RlcDFsZW5ndGggaXMgMAorUEFTUyBzdGVwMmxlbmd0aCBpcyAxCitQQVNT
IHN0ZXAyaXRlbSBpcyAiZm9vIgorUEFTUyBzdGVwM2xlbmd0aCBpcyAwCitQQVNTIHN0ZXAzaXRl
bSBpcyB1bmRlZmluZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vTWljcm9EYXRhL25hbWVzLXBy
b3BlcnR5LWFkZC1yZW1vdmUtaXRlbXJlZi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1yZWYuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1w
cm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1yZWYuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvbWljcm9kYXRhLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IG9uIGNoYW5naW5nIGl0ZW1S
ZWYgbXVzdCB1cGRhdGUgbmFtZXMgcHJvcGVydHkuIik7Cit2YXIgcGFyZW50ID0gY3JlYXRlRWxl
bWVudCgnZGl2Jyx7fSwnPGRpdiBpZD0ibXlEaXYiIGl0ZW1wcm9wPSJmb28iPjwvZGl2PjxkaXYg
aXRlbXNjb3BlPjwvZGl2PicpOwordmFyIHRlc3RFbGVtZW50ID0gcGFyZW50LmNoaWxkTm9kZXNb
MV07Cit2YXIgbmFtZXMgPSB0ZXN0RWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzOworc2hvdWxkQmUo
Im5hbWVzLmxlbmd0aCIsICIwIik7Cit0ZXN0RWxlbWVudC5pdGVtUmVmLmFkZCgnbXlEaXYnKTsK
K3Nob3VsZEJlKCJuYW1lcy5sZW5ndGgiLCAiMSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJu
YW1lc1swXSIsICJmb28iKTsKK3Rlc3RFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaXRlbXJlZicp
Oworc2hvdWxkQmUoIm5hbWVzLmxlbmd0aCIsICIwIik7CitzaG91bGRCZVVuZGVmaW5lZCgibmFt
ZXNbMF0iKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFyZW50KTsKK3ZhciBzdGVwMWxl
bmd0aCA9IG5hbWVzLmxlbmd0aDsKK3Rlc3RFbGVtZW50Lml0ZW1SZWYudG9nZ2xlKCdteURpdicp
OwordmFyIHN0ZXAybGVuZ3RoID0gbmFtZXMubGVuZ3RoOwordmFyIHN0ZXAyaXRlbSA9IG5hbWVz
WzBdOwordGVzdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdpdGVtcmVmJyk7Cit2YXIgc3RlcDNs
ZW5ndGggPSBuYW1lcy5sZW5ndGg7Cit2YXIgc3RlcDNpdGVtID0gbmFtZXNbMF07Citkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKHBhcmVudCk7CitzaG91bGRCZSgic3RlcDFsZW5ndGgiLCAiMCIp
Oworc2hvdWxkQmUoInN0ZXAybGVuZ3RoIiwgIjEiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygi
c3RlcDJpdGVtIiwgImZvbyIpOworc2hvdWxkQmUoInN0ZXAzbGVuZ3RoIiwgIjAiKTsKK3Nob3Vs
ZEJlVW5kZWZpbmVkKCJzdGVwM2l0ZW0iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vTWljcm9EYXRhL25hbWVzLXByb3BlcnR5LWFk
ZC1yZW1vdmUtaXRlbXNjb3BlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9NaWNyb0RhdGEvbmFtZXMtcHJvcGVydHktYWRkLXJlbW92ZS1pdGVtc2NvcGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vTWljcm9E
YXRhL25hbWVzLXByb3BlcnR5LWFkZC1yZW1vdmUtaXRlbXNjb3BlLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACitUaGlzIHRlc3RzIHRoYXQgYWRkaW5nIGFuZCBy
ZW1vdmluZyBpdGVtc2NvcGUgb24gdGhlIHJvb3QgbXVzdCB1cGRhdGUgdGhlIG5hbWVzIHByb3Bl
cnR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ3JlYXRlZCBlbGVtZW50IG9m
IHR5cGU6IGRpdgorU2V0IGF0dHJpYnV0ZTogaXRlbXNjb3BlLCB2YWx1ZTogaXRlbXNjb3BlCisK
K1BBU1MgZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzLmxlbmd0aCBpcyAxCitQQVNTIG5hbWVzLmxl
bmd0aCBpcyAxCitQQVNTIGVsZW1lbnQucHJvcGVydGllcy5uYW1lc1swXSBpcyAiZm9vIgorUEFT
UyBuYW1lc1swXSBpcyAiZm9vIgorUEFTUyBlbGVtZW50LnByb3BlcnRpZXMubmFtZXMuaXRlbSgw
KSBpcyAiZm9vIgorUEFTUyBuYW1lcy5pdGVtKDApIGlzICJmb28iCisKK1JlbW92aW5nIGl0ZW1T
Y29wZSBhdHRyaWJ1dGUKK1BBU1MgZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzLmxlbmd0aCBpcyAw
CitQQVNTIG5hbWVzLmxlbmd0aCBpcyAwCitQQVNTIGVsZW1lbnQucHJvcGVydGllcy5uYW1lc1sw
XSBpcyB1bmRlZmluZWQuCitQQVNTIG5hbWVzWzBdIGlzIHVuZGVmaW5lZC4KK1BBU1MgZWxlbWVu
dC5wcm9wZXJ0aWVzLm5hbWVzLml0ZW0oMCkgaXMgbnVsbAorUEFTUyBuYW1lcy5pdGVtKDApIGlz
IG51bGwKKworU2V0dGluZyBpdGVtU2NvcGUgYXR0cmlidXRlCitQQVNTIGVsZW1lbnQucHJvcGVy
dGllcy5uYW1lcy5sZW5ndGggaXMgMQorUEFTUyBuYW1lcy5sZW5ndGggaXMgMQorUEFTUyBlbGVt
ZW50LnByb3BlcnRpZXMubmFtZXNbMF0gaXMgImZvbyIKK1BBU1MgbmFtZXNbMF0gaXMgImZvbyIK
K1BBU1MgZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzLml0ZW0oMCkgaXMgImZvbyIKK1BBU1MgbmFt
ZXMuaXRlbSgwKSBpcyAiZm9vIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1l
cy1wcm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1zY29wZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1hZGQtcmVtb3ZlLWl0ZW1z
Y29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vTWljcm9EYXRh
L25hbWVzLXByb3BlcnR5LWFkZC1yZW1vdmUtaXRlbXNjb3BlLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL21pY3JvZGF0YS1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBhZGRpbmcg
YW5kIHJlbW92aW5nIGl0ZW1zY29wZSBvbiB0aGUgcm9vdCBtdXN0IHVwZGF0ZSB0aGUgbmFtZXMg
cHJvcGVydHkuIik7Cit2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHtpdGVtc2Nv
cGU6J2l0ZW1zY29wZSd9LCAnPGRpdiBpdGVtcHJvcD0iZm9vIj48L2Rpdj4nKTsKK3ZhciBuYW1l
cyA9IGVsZW1lbnQucHJvcGVydGllcy5uYW1lczsKKworZGVidWcoIiIpOworc2hvdWxkQmUoImVs
ZW1lbnQucHJvcGVydGllcy5uYW1lcy5sZW5ndGgiLCAiMSIpOworc2hvdWxkQmUoIm5hbWVzLmxl
bmd0aCIsICIxIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVsZW1lbnQucHJvcGVydGllcy5u
YW1lc1swXSIsICJmb28iKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmFtZXNbMF0iLCAiZm9v
Iik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVsZW1lbnQucHJvcGVydGllcy5uYW1lcy5pdGVt
KDApIiwgImZvbyIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuYW1lcy5pdGVtKDApIiwgImZv
byIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiUmVtb3ZpbmcgaXRlbVNjb3BlIGF0dHJpYnV0ZSIp
OworZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2l0ZW1zY29wZScpOworc2hvdWxkQmUoImVsZW1l
bnQucHJvcGVydGllcy5uYW1lcy5sZW5ndGgiLCAiMCIpOworc2hvdWxkQmUoIm5hbWVzLmxlbmd0
aCIsICIwIik7CitzaG91bGRCZVVuZGVmaW5lZCgiZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzWzBd
Iik7CitzaG91bGRCZVVuZGVmaW5lZCgibmFtZXNbMF0iKTsKK3Nob3VsZEJlTnVsbCgiZWxlbWVu
dC5wcm9wZXJ0aWVzLm5hbWVzLml0ZW0oMCkiKTsKK3Nob3VsZEJlTnVsbCgibmFtZXMuaXRlbSgw
KSIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiU2V0dGluZyBpdGVtU2NvcGUgYXR0cmlidXRlIik7
CitlbGVtZW50Lml0ZW1TY29wZSA9IHRydWU7CitzaG91bGRCZSgiZWxlbWVudC5wcm9wZXJ0aWVz
Lm5hbWVzLmxlbmd0aCIsICIxIik7CitzaG91bGRCZSgibmFtZXMubGVuZ3RoIiwgIjEiKTsKK3No
b3VsZEJlRXF1YWxUb1N0cmluZygiZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzWzBdIiwgImZvbyIp
Oworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuYW1lc1swXSIsICJmb28iKTsKK3Nob3VsZEJlRXF1
YWxUb1N0cmluZygiZWxlbWVudC5wcm9wZXJ0aWVzLm5hbWVzLml0ZW0oMCkiLCAiZm9vIik7Citz
aG91bGRCZUVxdWFsVG9TdHJpbmcoIm5hbWVzLml0ZW0oMCkiLCAiZm9vIik7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0
YS9uYW1lcy1wcm9wZXJ0eS1tdXN0LWJlLWxpdmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1tdXN0LWJlLWxp
dmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vTWlj
cm9EYXRhL25hbWVzLXByb3BlcnR5LW11c3QtYmUtbGl2ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorVGhpcyB0ZXN0cyB0aGF0IG5hbWVzIHByb3BlcnR5IG9m
IEhUTUxQcm9wZXJpZXNDb2xsZWN0aW9uIG11c3QgYmUgbGl2ZS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK0NyZWF0ZWQgZWxlbWVudCBvZiB0eXBlOiBkaXYKK1NldCBhdHRyaWJ1
dGU6IGl0ZW1zY29wZSwgdmFsdWU6IGl0ZW1zY29wZQorCitQQVNTIG5hbWVzIGlzIGVsZW1lbnQu
cHJvcGVydGllcy5uYW1lcworUEFTUyBuYW1lcy5sZW5ndGggaXMgMQorUEFTUyBuYW1lc1swXSBp
cyAiZm9vIgorUEFTUyBuYW1lcy5jb250YWlucygnZm9vJykgaXMgdHJ1ZQorCitBZGQgdG9rZW4g
dG8gaXRlbVByb3AgYXR0cmlidXRlCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAyCitQQVNTIG5hbWVz
WzBdIGlzICJmb28iCitQQVNTIG5hbWVzWzFdIGlzICJiYXIiCitQQVNTIG5hbWVzLmNvbnRhaW5z
KCdmb28nKSBpcyB0cnVlCitQQVNTIG5hbWVzLmNvbnRhaW5zKCdiYXInKSBpcyB0cnVlCisKK1Rv
Z2dsZSB0b2tlbnMgaW4gaXRlbVByb3AgYXR0cmlidXRlCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAy
CitQQVNTIG5hbWVzWzBdIGlzICJiYXIiCitQQVNTIG5hbWVzWzFdIGlzICJmb28iCitQQVNTIG5h
bWVzLmNvbnRhaW5zKCdiYXInKSBpcyB0cnVlCitQQVNTIG5hbWVzLmNvbnRhaW5zKCdmb28nKSBp
cyB0cnVlCisKK1JlbW92ZSB0b2tlbiBmcm9tIGl0ZW1Qcm9wIGF0dHJpYnV0ZQorUEFTUyBuYW1l
cy5sZW5ndGggaXMgMQorUEFTUyBuYW1lc1swXSBpcyAiYmFyIgorUEFTUyBuYW1lc1sxXSBpcyB1
bmRlZmluZWQuCitQQVNTIG5hbWVzLmNvbnRhaW5zKCdiYXInKSBpcyB0cnVlCitQQVNTIG5hbWVz
LmNvbnRhaW5zKCdmb28nKSBpcyBmYWxzZQorCitTZXQgYXR0cmlidXRlIGl0ZW1Qcm9wCitQQVNT
IG5hbWVzLmxlbmd0aCBpcyAxCitQQVNTIG5hbWVzWzBdIGlzICJxdXgiCitQQVNTIG5hbWVzLmNv
bnRhaW5zKCdxdXgnKSBpcyB0cnVlCisKK1JlbW92ZSBhdHRyaWJ1dGUgaXRlbVByb3AKK1BBU1Mg
bmFtZXMubGVuZ3RoIGlzIDAKK1BBU1MgbmFtZXNbMF0gaXMgdW5kZWZpbmVkLgorUEFTUyBuYW1l
cy5jb250YWlucygncXV4JykgaXMgZmFsc2UKKworQ3JlYXRlZCBlbGVtZW50IG9mIHR5cGU6IGRp
dgorU2V0IGF0dHJpYnV0ZTogaXRlbXNjb3BlLCB2YWx1ZTogaXRlbXNjb3BlCitQQVNTIG5hbWVz
Lmxlbmd0aCBpcyAyCitQQVNTIG5hbWVzWzBdIGlzICJmb28iCitQQVNTIG5hbWVzWzFdIGlzICJi
YXIiCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAyCitQQVNTIG5hbWVzWzBdIGlzICJiYXIiCitQQVNT
IG5hbWVzWzFdIGlzICJmb28iCitQQVNTIG5hbWVzLmxlbmd0aCBpcyAyCitQQVNTIG5hbWVzWzBd
IGlzICJmb28iCitQQVNTIG5hbWVzWzFdIGlzICJiYXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
TWljcm9EYXRhL25hbWVzLXByb3BlcnR5LW11c3QtYmUtbGl2ZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9uYW1lcy1wcm9wZXJ0eS1tdXN0LWJlLWxp
dmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL01pY3JvRGF0YS9u
YW1lcy1wcm9wZXJ0eS1tdXN0LWJlLWxpdmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvbWljcm9kYXRhLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IG5hbWVzIHByb3BlcnR5IG9m
IEhUTUxQcm9wZXJpZXNDb2xsZWN0aW9uIG11c3QgYmUgbGl2ZS4iKTsKK3ZhciBlbGVtZW50ID0g
Y3JlYXRlRWxlbWVudCgnZGl2Jywge2l0ZW1zY29wZTogJ2l0ZW1zY29wZSd9LCAnPGRpdiBpdGVt
cHJvcD0iZm9vIj48L2Rpdj4nKTsKK3ZhciBuYW1lcyA9IGVsZW1lbnQucHJvcGVydGllcy5uYW1l
czsKK2RlYnVnKCIiKTsKK3Nob3VsZEJlKCJuYW1lcyIsICJlbGVtZW50LnByb3BlcnRpZXMubmFt
ZXMiKTsKK3Nob3VsZEJlKCJuYW1lcy5sZW5ndGgiLCAiMSIpOworc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJuYW1lc1swXSIsICJmb28iKTsKK3Nob3VsZEJlVHJ1ZSgibmFtZXMuY29udGFpbnMoJ2Zv
bycpIik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJBZGQgdG9rZW4gdG8gaXRlbVByb3AgYXR0cmli
dXRlIikKK2VsZW1lbnQuZmlyc3RDaGlsZC5pdGVtUHJvcC5hZGQoImJhciIpOworc2hvdWxkQmUo
Im5hbWVzLmxlbmd0aCIsICIyIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5hbWVzWzBdIiwg
ImZvbyIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuYW1lc1sxXSIsICJiYXIiKTsKK3Nob3Vs
ZEJlVHJ1ZSgibmFtZXMuY29udGFpbnMoJ2ZvbycpIik7CitzaG91bGRCZVRydWUoIm5hbWVzLmNv
bnRhaW5zKCdiYXInKSIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiVG9nZ2xlIHRva2VucyBpbiBp
dGVtUHJvcCBhdHRyaWJ1dGUiKTsKK2VsZW1lbnQuZmlyc3RDaGlsZC5pdGVtUHJvcC50b2dnbGUo
ImZvbyIpOworZWxlbWVudC5maXJzdENoaWxkLml0ZW1Qcm9wLnRvZ2dsZSgiZm9vIik7CitzaG91
bGRCZSgibmFtZXMubGVuZ3RoIiwgIjIiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmFtZXNb
MF0iLCAiYmFyIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5hbWVzWzFdIiwgImZvbyIpOwor
c2hvdWxkQmVUcnVlKCJuYW1lcy5jb250YWlucygnYmFyJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmFt
ZXMuY29udGFpbnMoJ2ZvbycpIik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZW1vdmUgdG9rZW4g
ZnJvbSBpdGVtUHJvcCBhdHRyaWJ1dGUiKQorZWxlbWVudC5maXJzdENoaWxkLml0ZW1Qcm9wLnJl
bW92ZSgiZm9vIik7CitzaG91bGRCZSgibmFtZXMubGVuZ3RoIiwgIjEiKTsKK3Nob3VsZEJlRXF1
YWxUb1N0cmluZygibmFtZXNbMF0iLCAiYmFyIik7CitzaG91bGRCZVVuZGVmaW5lZCgibmFtZXNb
MV0iKTsKK3Nob3VsZEJlVHJ1ZSgibmFtZXMuY29udGFpbnMoJ2JhcicpIik7CitzaG91bGRCZUZh
bHNlKCJuYW1lcy5jb250YWlucygnZm9vJykiKTsKKworZGVidWcoIiIpOworZGVidWcoIlNldCBh
dHRyaWJ1dGUgaXRlbVByb3AiKQorZWxlbWVudC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgiaXRl
bXByb3AiLCAicXV4Iik7CitzaG91bGRCZSgibmFtZXMubGVuZ3RoIiwgIjEiKTsKK3Nob3VsZEJl
RXF1YWxUb1N0cmluZygibmFtZXNbMF0iLCAicXV4Iik7CitzaG91bGRCZVRydWUoIm5hbWVzLmNv
bnRhaW5zKCdxdXgnKSIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiUmVtb3ZlIGF0dHJpYnV0ZSBp
dGVtUHJvcCIpCitlbGVtZW50LmZpcnN0Q2hpbGQucmVtb3ZlQXR0cmlidXRlKCJpdGVtcHJvcCIp
Oworc2hvdWxkQmUoIm5hbWVzLmxlbmd0aCIsICIwIik7CitzaG91bGRCZVVuZGVmaW5lZCgibmFt
ZXNbMF0iKTsKK3Nob3VsZEJlRmFsc2UoIm5hbWVzLmNvbnRhaW5zKCdxdXgnKSIpOworCitkZWJ1
ZygiIik7CitlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2Jyx7aXRlbXNjb3BlOidpdGVtc2Nv
cGUnfSwnPGRpdiBpdGVtcHJvcD0iZm9vIj48L2Rpdj48ZGl2IGl0ZW1wcm9wPSJiYXIiPjwvZGl2
PjxkaXYgaXRlbXByb3A9ImZvbyI+PC9kaXY+Jyk7CituYW1lcyA9IGVsZW1lbnQucHJvcGVydGll
cy5uYW1lczsKK3Nob3VsZEJlKCJuYW1lcy5sZW5ndGgiLCAiMiIpOworc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJuYW1lc1swXSIsICJmb28iKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmFtZXNb
MV0iLCAiYmFyIik7CitlbGVtZW50LmZpcnN0Q2hpbGQucmVtb3ZlQXR0cmlidXRlKCdpdGVtcHJv
cCcpOworc2hvdWxkQmUoIm5hbWVzLmxlbmd0aCIsICIyIik7CitzaG91bGRCZUVxdWFsVG9TdHJp
bmcoIm5hbWVzWzBdIiwgImJhciIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuYW1lc1sxXSIs
ICJmb28iKTsKK2VsZW1lbnQuZmlyc3RDaGlsZC5pdGVtUHJvcC5hZGQoJ2ZvbycpOworc2hvdWxk
QmUoIm5hbWVzLmxlbmd0aCIsICIyIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5hbWVzWzBd
IiwgImZvbyIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuYW1lc1sxXSIsICJiYXIiKTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>