<?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>77740</bug_id>
          
          <creation_ts>2012-02-03 08:20:54 -0800</creation_ts>
          <short_desc>Split CSSMutableStyleDeclaration into separate internal and CSSOM types</short_desc>
          <delta_ts>2012-02-03 11:48:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>548731</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 08:20:54 -0800</bug_when>
    <thetext>CSSStyleDeclaration is part of the external CSSOM interface. WebCore shouldn&apos;t use for storing properties internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548746</commentid>
    <comment_count>1</comment_count>
      <attachid>125337</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 08:31:31 -0800</bug_when>
    <thetext>Created attachment 125337
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548749</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 08:34:37 -0800</bug_when>
    <thetext>Attachment 125337 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSParser.h:77:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/editing/EditingStyle.h:226:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSParser.cpp:611:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 60 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>548766</commentid>
    <comment_count>3</comment_count>
      <attachid>125337</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-03 08:51:28 -0800</bug_when>
    <thetext>Comment on attachment 125337
patch

Attachment 125337 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11421303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548796</commentid>
    <comment_count>4</comment_count>
      <attachid>125337</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 09:36:19 -0800</bug_when>
    <thetext>Comment on attachment 125337
patch

Attachment 125337 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11422314

New failing tests:
animations/missing-from-to-transforms.html
animations/fill-mode-missing-from-to-keyframes.html
animations/animation-add-events-in-handler.html
animations/missing-from-to.html
animations/animation-on-inline-crash.html
animations/empty-keyframes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548810</commentid>
    <comment_count>5</comment_count>
      <attachid>125337</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-03 10:01:53 -0800</bug_when>
    <thetext>Comment on attachment 125337
patch

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

The EWS results seem to indicate that something isn’t working, so I’m not actually setting review+, but otherwise I would.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:237
&gt; +    // StylePropertySet and CSSStyleDeclaration ref each other. When we have a declaration and
&gt; +    // our refcount drops to one we know it is the only thing keeping us alive.
&gt; +    if (m_cssStyleDeclaration &amp;&amp; hasOneRef())
&gt; +        m_cssStyleDeclaration.clear();

I think there is a better design pattern for this.

My suggestion is that you change CSSStyleDeclaration so it does not inherit from RefCounted, and has ref and deref functions that call the ref and deref on the StylePropertySet. Then we have only one shared reference count. CSSStyleDeclaration will use a raw pointer to point to StylePropertySet. StylePropertySet will use an OwnPtr for m_cssStyleDeclaration. What do you think of that?

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.h:37
&gt; +class StylePropertySet : public RefCounted&lt;StylePropertySet&gt; {

Normally a “set” is an unordered collection. This collection has an order. So using the word set in the name is not so great, but perhaps OK.

This class should inherit from RefCountedBase, not RefCounted&lt;StylePropertySet&gt;. The only thing that RefCounted adds to RefCountedBase is a deref function, and we are providing our own. But you won’t need to change that if you take my suggestion about how to handle the reference counting.

&gt;&gt; Source/WebCore/css/CSSParser.cpp:611
&gt;&gt; +bool CSSParser::parseDeclaration(StylePropertySet* declaration, const String&amp; string, RefPtr&lt;CSSStyleSourceData&gt;* styleSourceData, CSSStyleSheet* contextStyleSheet)
&gt; 
&gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]

This is a bug in the style checker.

&gt;&gt; Source/WebCore/editing/EditingStyle.h:226
&gt;&gt; +int getIdentifierValue(StylePropertySet* style, CSSPropertyID);
&gt; 
&gt; The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the style bot here. We should remove the name style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548819</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 10:18:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The EWS results seem to indicate that something isn’t working, so I’m not actually setting review+, but otherwise I would.

Will update.

&gt; I think there is a better design pattern for this.
&gt; 
&gt; My suggestion is that you change CSSStyleDeclaration so it does not inherit from RefCounted, and has ref and deref functions that call the ref and deref on the StylePropertySet. Then we have only one shared reference count. CSSStyleDeclaration will use a raw pointer to point to StylePropertySet. StylePropertySet will use an OwnPtr for m_cssStyleDeclaration. What do you think of that?

Sounds sensible but I&apos;ll leave that to a followup. The computed style refcounting needs to be considered too.

&gt; Normally a “set” is an unordered collection. This collection has an order. So using the word set in the name is not so great, but perhaps OK.

This is primarily a set (used almost mainly through set-like interface) so I think the name fits. (and we have ordered ListHashSet too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548827</commentid>
    <comment_count>7</comment_count>
      <attachid>125360</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 10:30:21 -0800</bug_when>
    <thetext>Created attachment 125360
updated patch

- fix a keyframe crasher
- try to fix the qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548829</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 10:33:41 -0800</bug_when>
    <thetext>Attachment 125360 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSParser.h:77:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:611:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 62 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>548909</commentid>
    <comment_count>9</comment_count>
      <attachid>125360</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-03 11:44:07 -0800</bug_when>
    <thetext>Comment on attachment 125360
updated patch

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

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.h:37
&gt; +class StylePropertySet : public RefCounted&lt;StylePropertySet&gt; {

As I said in my first review, this should derive from RefCountedBase, not RefCounted&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548912</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 11:47:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106681</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548913</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 11:48:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; As I said in my first review, this should derive from RefCountedBase, not RefCounted&lt;&gt;.

Yeah, the landed patch has that fix too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125337</attachid>
            <date>2012-02-03 08:31:31 -0800</date>
            <delta_ts>2012-02-03 10:30:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>stylepropertyset-7.patch</filename>
            <type>text/plain</type>
            <size>154266</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjY2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwNSBAQAorMjAxMi0wMi0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzQwCisgICAgICAgIEludGVybmFsIHByb3BlcnR5IHNl
dCB0eXBlIHNob3VsZCBub3QgYmUgQ1NTU3R5bGVEZWNsYXJhdGlvbgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHRoZSBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiBpbnRvIGFuIGludGVybmFsIHR5cGUgKFN0eWxlUHJvcGVydHlTZXQpIGFu
ZCBhIENTU09NIGltcGxlbWVudGF0aW9uIHR5cGUgKFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbikuCisgICAgICAgIAorICAgICAgICBUbyBrZWVwIHRoaW5ncyBzb21ld2hhdCBtYW5hZ2Vh
YmxlLCB0aGlzIHBhdGNoIGRvZXMgTk9UCisKKyAgICAgICAgLSByZW5hbWUgb3IgYWRkIGFueSBm
aWxlcyAoc28gZmlsZXMgbmFtZXMgd29uJ3QgbWF0Y2ggdHlwZXMpCisgICAgICAgIC0gcmVuYW1l
IGZpZWxkcywgbWV0aG9kcyBvciB2YXJpYWJsZXMgdG8gbWF0Y2ggbmV3IHR5cGUgbmFtZXMgKGxp
a2UgQ1NTU3R5bGVSdWxlOjpkZWNsYXJhdGlvbigpIC0+IENTU1N0eWxlUnVsZTo6cHJvcGVydHlT
ZXQoKSkKKyAgICAgICAgLSB0cnkgdG8gcmVhbGl6ZSBhbnkgbWVtb3J5IG9yIHBlcmZvcm1hbmNl
IGdhaW5zIChTdHlsZVByb3BlcnR5U2V0IGxvc2VzIHRoZSB2cHRyIGJ1dCBnYWlucyBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qKQorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5T
ZXQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKToKKyAg
ICAgICAgKiBjc3MvQ1NTRm9udEZhY2VSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVJ1bGU6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlUnVsZTo6ZGVj
bGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpzZXREZWNsYXJh
dGlvbik6CisgICAgICAgIChDU1NGb250RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NGb250
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250
RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlT
ZXQ6OmNvbnRleHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlT
ZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5
U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlT
ZXQ6OmJvcmRlclNwYWNpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5
U2V0OjphcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UHJvcGVydHlTZXQ6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJv
cGVydHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldDo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5U2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQ6OmlzUHJvcGVydHlJbXBsaWNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dHlTZXQ6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OmNvcHlCbG9ja1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBy
b3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0eVNldDo6cHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJv
cGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldDo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3Bl
cnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRo
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
aXNQcm9wZXJ0eUltcGxpY2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246Om1ha2VN
dXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVQcm9wZXJ0eVNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlSW5saW5lKToKKyAgICAgICAgKiBj
c3MvQ1NTUGFnZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvclZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VE
ZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpzdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVJ1bGU6OnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlUnVsZTo6ZGVjbGFyYXRpb24pOgorICAgICAgICAoQ1NTU3R5bGVSdWxlKToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VG9S
aWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xh
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnNpZGVSZWdpb25SdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoQ1NTU3R5bGVTZWxl
Y3Rvcik6CisgICAgICAgIChNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICogY3Nz
L1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lUnVsZTo6ZGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKToKKyAgICAgICAgKiBjc3MvV2Vi
S2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0
TWF0cml4VmFsdWUpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgIChXZWJDb3JlOjpB
dHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0F0dHJpYnV0ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6QXR0cmlidXRlOjpkZWNsKToKKyAgICAgICAgKiBkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0
aW9uOjpkZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbjo6Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24pOgorICAgICAgICAoQ1NT
TWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbik6
CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChFbGVtZW50
QXR0cmlidXRlRGF0YSk6CisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmVuc3VyZUlubGluZVN0eWxlRGVjbCk6CisgICAgICAg
ICogZG9tL05hbWVkTm9kZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpp
bmxpbmVTdHlsZURlY2wpOgorICAgICAgICAoTmFtZWROb2RlTWFwKToKKyAgICAgICAgKiBkb20v
U3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRh
dGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpjb3B5
Tm9uQXR0cmlidXRlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRpdGlvbmFsQXR0cmli
dXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVE
ZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmVuc3VyZUlubGluZVN0eWxl
RGVjbCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5n
VXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVD
b21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlQnV0dG9uQ29u
dHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weUVkaXRpbmdQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojpwcm9wZXJ0
eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoSFRNTEVsZW1lbnRFcXVpdmFsZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxl
KToKKyAgICAgICAgKEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnZhbHVl
SXNQcmVzZW50SW5TdHlsZSk6CisgICAgICAgIChIVE1MQXR0cmlidXRlRXF1aXZhbGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRy
aWJ1dGVWYWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpF
ZGl0aW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UkdCQUZvbnRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1M
RXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5
SXNOb3RJbklubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9y
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9t
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1
bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVQcm9wZXJ0aWVz
SW5TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJv
bVJ1bGVzQW5kQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92
ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpmb3JjZUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWNvbmNpbGVUZXh0
RGVjb3JhdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0
eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHREZWNvcmF0aW9uUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRpZmZUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUZXh0QWxpZ25tZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFByb3BlcnRpZXNOb3RJbik6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJZGVudGlmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNUcmFuc3BhcmVudENv
bG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6Y3JlYXRlKToKKyAgICAgICAgKEVk
aXRpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnN0eWxlKToKKyAg
ICAgICAgKFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUNvbW1h
bmRUb0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVBcHBseVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRl
TWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KToKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
UmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSk6CisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVDZWxsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVu
dDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNl
bGxFbGVtZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVDZWxsRWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZUNvbEVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGFibGVDb2xFbGVtZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVDb2xFbGVtZW50KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGVh
a0JvcmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50
OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxl
bWVudDo6YWRkaXRpb25hbENlbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpsZWFrR3JvdXBC
b3JkZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjphZGRpdGlv
bmFsR3JvdXBTdHlsZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50Lmg6CisgICAg
ICAgIChIVE1MVGFibGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVNlY3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojph
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KToKKyAgICAgICAg
KiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEJ1
YmJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6cmVzZXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtl
VHJhbnNwYXJlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0xpbWl0ZXJFbGVtZW50OjpjcmVhdGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckF0dHJpYnV0ZVN0eWxlcyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0eWxlQXR0cmlidXRlUmFuZ2Vz
KToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2
ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxp
emVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBhZ2VTZXJpYWxpemVyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlU3Bhbik6
CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGb250RmFjZUVsZW1lbnQ6OlNWR0ZvbnRGYWNlRWxlbWVudCk6CisKIDIwMTItMDItMDMg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB0eXBv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBf
X1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxOHdpbmRvd1NjCiBfX1pON1dlYkNvcmUxNlNj
cmlwdENvbnRyb2xsZXIyMGV4ZWN1dGVTY3JpcHRJbldvcmxkRVBOU18xNURPTVdyYXBwZXJXb3Js
ZEVSS04zV1RGNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyMXByb2Nl
c3NpbmdVc2VyR2VzdHVyZUV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyNGpzT2Jq
ZWN0Rm9yUGx1Z2luRWxlbWVudEVQTlNfMTdIVE1MUGx1Z0luRWxlbWVudEUKK19fWk43V2ViQ29y
ZTE2U3R5bGVQcm9wZXJ0eVNldDVkZXJlZkV2CiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERh
dGExMHN0YXRpY0RhdGFFCiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGFDMUV2CiBfX1pO
N1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGFEMUV2CkBAIC02NzMsNyArNjc0LDYgQEAgX19aTjdX
ZWJDb3JlMjVhZGRMYW5ndWFnZUNoYW5nZU9ic2VydmVyRQogX19aTjdXZWJDb3JlMjVjb21wdXRl
Vmlld3BvcnRBdHRyaWJ1dGVzRU5TXzE3Vmlld3BvcnRBcmd1bWVudHNFaWlpaU5TXzdJbnRTaXpl
RQogX19aTjdXZWJDb3JlMjVjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lRXYKIF9fWk43V2ViQ29y
ZTI1d2luZG93c0tleUNvZGVGb3JLZXlFdmVudEVQN05TRXZlbnQKLV9fWk43V2ViQ29yZTI2Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25DMUV2CiBfX1pON1dlYkNvcmUyNlVzZXJUeXBpbmdHZXN0
dXJlSW5kaWNhdG9yMjdwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmVFdgogX19aTjdXZWJDb3Jl
MjZVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcjI4Zm9jdXNlZEVsZW1lbnRBdEdlc3R1cmVTdGFy
dEV2CiBfX1pON1dlYkNvcmUyNmNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51RXYKQEAgLTEyOTYs
NiArMTI5Niw3IEBAIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxNWlzUGFzc3cKIF9f
Wk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxOHNob3VsZEF1dG9jb21wbGV0ZUV2CiBfX1pO
SzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzZVBhdGhFdgogX19aTks3V2ViQ29y
ZTE2UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2CitfX1pOSzdXZWJDb3JlMTZTdHls
ZVByb3BlcnR5U2V0MjVlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9fWk5LN1dlYkNvcmUx
NlZpc2libGVTZWxlY3Rpb24xN2lzQ29udGVudEVkaXRhYmxlRXYKIF9fWk5LN1dlYkNvcmUxNlZp
c2libGVTZWxlY3Rpb24xN3RvTm9ybWFsaXplZFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUxNlZpc2li
bGVTZWxlY3Rpb24xOXJvb3RFZGl0YWJsZUVsZW1lbnRFdgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEw
NjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTE0LDEyICsyNTE0LDEyIEBAIGJvb2wgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm8KICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNz
c1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwogfQogCi1QYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmNvcHkoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdAogewogICAgIHJldHVybiBjb3B5UHJvcGVydGll
c0luU2V0KGNvbXB1dGVkUHJvcGVydGllcywgbnVtQ29tcHV0ZWRQcm9wZXJ0aWVzKTsKIH0KIAot
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjptYWtlTXV0YWJsZSgpCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQogewogICAgIHJldHVybiBj
b3B5KCk7CiB9CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTQ29tcHV0ZWRTdHlsCiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkg
Y29uc3QKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OwogICAgIGxpc3QucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQwogICAgICAgICBpZiAodmFsdWUpCiAg
ICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2Uo
KSwgZmFsc2UpKTsKICAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUobGlzdCk7CisgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShsaXN0
KTsKIH0KIAogQ1NTUnVsZSogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxl
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7Ci1jbGFzcyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3Mg
Q1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29sOworY2xhc3MgQ29sb3I7CiBjbGFzcyBO
b2RlOwogY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBTaGFkb3dEYXRhOwogY2xhc3MgU1ZHUGFp
bnQ7CitjbGFzcyBTaGFkb3dEYXRhOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIAogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKIGNsYXNzIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjsKQEAg
LTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBw
cm9wZXJ0eUlEKSBjb25zdDsKICAgICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3Bl
cnR5SUQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCk7CiAKICAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVy
cmluZ0tleXdvcmQoKSBjb25zdDsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFNWR1Byb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQsIEVV
cGRhdGVMYXlvdXQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29w
eVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24oUGFzc1JlZlB0cjxO
b2RlPiwgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE5ICs0
MiwxOSBAQCBwdWJsaWM6CiAKICAgICB+Q1NTRm9udEZhY2VSdWxlKCk7CiAKLSAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVu
c3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHls
ZTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KIAogICAgIHZvaWQgYWRk
U3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpOwogCiBwcml2YXRl
OgogICAgIENTU0ZvbnRGYWNlUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCi0gICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAgIFJlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBtX3N0eWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwNjY2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjppc0VtcHR5KCkgY29uc3QK
IHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgQ1NTRm9udEZhY2VS
dWxlKiBmb250RmFjZVJ1bGUpCiB7CiAgICAgLy8gT2J0YWluIHRoZSBmb250LWZhbWlseSBwcm9w
ZXJ0eSBhbmQgdGhlIHNyYyBwcm9wZXJ0eS4gIEJvdGggbXVzdCBiZSBkZWZpbmVkLgotICAgIGNv
bnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGZvbnRGYWNlUnVsZS0+ZGVj
bGFyYXRpb24oKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGZvbnRGYWNl
UnVsZS0+ZGVjbGFyYXRpb24oKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlTcmMpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZVJhbmdlID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lv
biAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNDYgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0eVNldCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3Bl
cnR5U2V0KSk7IAorICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0eVNldCkgOiBtX3By
b3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBh
cmVudFJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhj
ZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQ
cm9wZXJ0eUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVl
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBy
b3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJv
b2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
bWFrZU11dGFibGUoKSBPVkVSUklERTsKKyAgICAKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gbV9wcm9wZXJ0eVNldDsKK307CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVBdHRyaWJ1
dGVNdXRhdGlvblNjb3BlKTsKIHB1YmxpYzoKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2Nv
cGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCisgICAgU3R5bGVBdHRyaWJ1dGVN
dXRhdGlvblNjb3BlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2wpCiAgICAgewogICAgICAgICArK3Nf
c2NvcGVDb3VudDsKIApAQCAtOTIsNyArMTI2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIgaW50ZXJuYWwgc3Rh
dGUgYmVmb3JlIGNhbGxpbmcgSW5zcGVjdG9yJ3MgY29kZS4KLSAgICAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNfY3VycmVudERlY2w7CisgICAg
ICAgIFN0eWxlUHJvcGVydHlTZXQqIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNfY3VycmVudERlY2w7
CiAgICAgICAgIHNfY3VycmVudERlY2wgPSAwOwogICAgICAgICBzX3Nob3VsZE5vdGlmeUluc3Bl
Y3RvciA9IGZhbHNlOwogICAgICAgICBpZiAobG9jYWxDb3B5U3R5bGVEZWNsLT5pc0lubGluZVN0
eWxlRGVjbGFyYXRpb24oKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKSAm
JiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkKQEAgLTEx
NCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHVuc2lnbmVkIHNf
c2NvcGVDb3VudDsKLSAgICBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHNfY3Vy
cmVudERlY2w7CisgICAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHNfY3VycmVudERlY2w7CiAg
ICAgc3RhdGljIGJvb2wgc19zaG91bGROb3RpZnlJbnNwZWN0b3I7CiAjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKICAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZERlbGl2ZXI7CkBAIC0xMjUs
NyArMTU5LDcgQEAgcHJpdmF0ZToKIH07CiAKIHVuc2lnbmVkIFN0eWxlQXR0cmlidXRlTXV0YXRp
b25TY29wZTo6c19zY29wZUNvdW50ID0gMDsKLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBT
dHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAwOworU3R5bGVQcm9w
ZXJ0eVNldCogU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJlbnREZWNsID0gMDsK
IGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZE5vdGlmeUluc3BlY3Rv
ciA9IGZhbHNlOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiBib29sIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGREZWxpdmVyID0gZmFsc2U7CkBAIC0xMzMsMzEg
KzE2NywzMCBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91CiAKIH0g
Ly8gbmFtZXNwYWNlCiAKLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbigpCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KCkKICAg
ICA6IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKICAgICAsIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0
aW9uKGZhbHNlKQogICAgICwgbV9wYXJlbnQoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KDApKQogewog
fQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSogcGFyZW50UnVsZSkKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlT
ZXQoQ1NTUnVsZSogcGFyZW50UnVsZSkKICAgICA6IG1fc3RyaWN0UGFyc2luZyghcGFyZW50UnVs
ZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAgLCBtX2lzSW5saW5lU3R5
bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fcGFyZW50KHBhcmVudFJ1bGUpCiB7CiB9CiAK
LUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihD
U1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVz
KQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxl
LCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogICAgIDogbV9wcm9wZXJ0
aWVzKHByb3BlcnRpZXMpCiAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVudFJ1bGUgfHwgcGFy
ZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQogICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFy
YXRpb24oZmFsc2UpCiAgICAgLCBtX3BhcmVudChwYXJlbnRSdWxlKQogewogICAgIG1fcHJvcGVy
dGllcy5zaHJpbmtUb0ZpdCgpOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUg
cHJvcGVydGllcy4KIH0KIAotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBj
b25zdCAqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQorU3R5bGVQcm9wZXJ0eVNldDo6
U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSog
Y29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKICAgICA6IG1fc3RyaWN0UGFy
c2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAg
LCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fcGFyZW50KHBhcmVu
dFJ1bGUpCkBAIC0xODEsMTggKzIxNCwzMCBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Q1NTTXV0YWJsZVN0CiAgICAgfQogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgCitT
dHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQpIAogICAgIDogbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQogICAgICwgbV9pc0lubGluZVN0
eWxlRGVjbGFyYXRpb24odHJ1ZSkKICAgICAsIG1fcGFyZW50KHBhcmVudEVsZW1lbnQpCiB7IAog
fQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6fkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKCkKK1N0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkKIHsKIH0KIAotQ1NT
U3R5bGVTaGVldCogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0
KCkgY29uc3QKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6ZGVyZWYoKQoreworICAgIGlmIChkZXJl
ZkJhc2UoKSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBTdHlsZVByb3BlcnR5U2V0IGFuZCBDU1NTdHlsZURlY2xhcmF0aW9uIHJlZiBlYWNo
IG90aGVyLiBXaGVuIHdlIGhhdmUgYSBkZWNsYXJhdGlvbiBhbmQKKyAgICAvLyBvdXIgcmVmY291
bnQgZHJvcHMgdG8gb25lIHdlIGtub3cgaXQgaXMgdGhlIG9ubHkgdGhpbmcga2VlcGluZyB1cyBh
bGl2ZS4KKyAgICBpZiAobV9jc3NTdHlsZURlY2xhcmF0aW9uICYmIGhhc09uZVJlZigpKQorICAg
ICAgICBtX2Nzc1N0eWxlRGVjbGFyYXRpb24uY2xlYXIoKTsKK30KKworQ1NTU3R5bGVTaGVldCog
U3R5bGVQcm9wZXJ0eVNldDo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAogewogICAgIGlmICht
X2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbikgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX3BhcmVudC5lbGVtZW50ID8gbV9wYXJlbnQuZWxlbWVudC0+ZG9jdW1lbnQoKSA6IDA7CkBA
IC0yMDEsMTIgKzI0NiwxMiBAQCBDU1NTdHlsZVNoZWV0KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvCiAgICAgcmV0dXJuIG1fcGFyZW50LnJ1bGUgPyBtX3BhcmVudC5ydWxlLT5wYXJlbnRTdHls
ZVNoZWV0KCkgOiAwOwogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5
UHJvcGVydGllc0Zyb20oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIG90aGVyKQor
dm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCYgb3RoZXIpCiB7CiAgICAgbV9wcm9wZXJ0aWVzID0gb3RoZXIubV9wcm9wZXJ0aWVz
OwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJv
cGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICBpZiAodmFsdWUp
CkBAIC0zNzcsNyArNDIyLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpib3JkZXJTcGFjaW5nVmFsdWUoY29uc3QgaW50IHByb3BlcnRpZXNbMl0pIGNv
bnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzJdKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gaG9yaXpvbnRh
bFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzBdKTsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNb
MV0pOwpAQCAtMzkzLDcgKzQzOCw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Ym9yZGUKICAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCArICcgJyArIHZlcnRp
Y2FsVmFsdWVDU1NUZXh0OwogfQogCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjph
cHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoaW50IHByb3BlcnR5SWQsIFN0cmluZ0J1
aWxkZXImIHJlc3VsdCkgY29uc3QKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6YXBwZW5kRm9udExv
bmdoYW5kVmFsdWVJZkV4cGxpY2l0KGludCBwcm9wZXJ0eUlkLCBTdHJpbmdCdWlsZGVyJiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3Bl
cnR5V2l0aElkKHByb3BlcnR5SWQpOwogICAgIGlmICghcHJvcGVydHkpCkBAIC00MjQsNyArNDY5
LDcgQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXBwZW5kRgogICAgIHJldHVy
biB0cnVlOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmZvbnRWYWx1
ZSgpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKCkgY29uc3QKIHsK
ICAgICBjb25zdCBDU1NQcm9wZXJ0eSogZm9udFNpemVQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdp
dGhJZChDU1NQcm9wZXJ0eUZvbnRTaXplKTsKICAgICBpZiAoIWZvbnRTaXplUHJvcGVydHkgfHwg
Zm9udFNpemVQcm9wZXJ0eS0+aXNJbXBsaWNpdCgpKQpAQCAtNDQ5LDcgKzQ5NCw3IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Zm9udFYKICAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7CiB9CiAKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFZh
bHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNl
dDo6Z2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0CiB7CiAgICAgLy8gQXNz
dW1lIHRoZSBwcm9wZXJ0aWVzIGFyZSBpbiB0aGUgdXN1YWwgb3JkZXIgdG9wLCByaWdodCwgYm90
dG9tLCBsZWZ0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9wVmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnRpZXNbMF0pOwpAQCAtNDc2LDcgKzUyMSw3IEBAIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFYKICAgICByZXR1cm4gcmVzOwogfQogCi1TdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25z
dCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAorU3RyaW5nIFN0eWxlUHJvcGVy
dHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNp
emVfdCBzaXplKSBjb25zdAogewogICAgIFN0cmluZyByZXM7CiAKQEAgLTU3Nyw3ICs2MjIsNyBA
QCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExhCiAgICAgcmV0dXJuIHJl
czsKIH0KIAotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9ydGhhbmRW
YWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAorU3RyaW5nIFN0
eWxlUHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywg
c2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlczsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtNTk1LDcgKzY0MCw3IEBAIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0U2gKIH0KIAogLy8gb25seSByZXR1cm5zIGEgbm9uLW51
bGwgdmFsdWUgaWYgYWxsIHByb3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9uLW51bGwgdmFsdWUK
LVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0Q29tbW9uVmFsdWUoY29uc3Qg
aW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnR5
U2V0OjpnZXRDb21tb25WYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBj
b25zdAogewogICAgIFN0cmluZyByZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKQEAgLTYxMywxMyArNjU4LDEzIEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0Q28KICAgICByZXR1cm4gcmVzOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJv
cGVydHlJRCkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6Omdl
dFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NT
UHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwogICAg
IHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKIH0KIAotYm9vbCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3Zl
U2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsK
ICAgICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShw
cm9wZXJ0eUlEKTsKICAgICBpZiAoIWxvbmdoYW5kLmxlbmd0aCgpKQpAQCAtNjI3LDcgKzY3Miw3
IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVMKICAgICByZXR1cm4g
cmVtb3ZlUHJvcGVydGllc0luU2V0KGxvbmdoYW5kLnByb3BlcnRpZXMoKSwgbG9uZ2hhbmQubGVu
Z3RoKCksIG5vdGlmeUNoYW5nZWQpOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQs
IGJvb2wgcmV0dXJuVGV4dCkKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJldHVyblRleHQpCiB7
CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0
aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKQEAgLTY1OCw3ICs3MDMsNyBAQCBTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92CiAgICAgcmV0dXJuIHZhbHVlOwogfQog
Ci12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkK
K3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCiB7CiAgICAgaWYg
KGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKSB7CiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQgPSBwYXJlbnRFbGVtZW50KCk7CkBAIC02NzAsMTMgKzcxNSwxMyBAQCB2b2lkIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkg
eworICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQo
KSkgewogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+ZmluZERv
Y3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVm
ZXJSZWNhbGNTdHlsZSk7CiAgICAgfQogfQogCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25zdAorYm9vbCBTdHls
ZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25zdAog
ewogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChw
cm9wZXJ0eUlEKTsKICAgICBpZiAocHJvcGVydHkpCkBAIC02OTMsMTkgKzczOCwxOSBAQCBib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwcm9wZXJ0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWludCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW50IHByb3BlcnR5SUQpIGNvbnN0CitpbnQgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlT
aG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwogICAgIHJldHVybiBw
cm9wZXJ0eSA/IHByb3BlcnR5LT5zaG9ydGhhbmRJRCgpIDogMDsKIH0KIAotYm9vbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBj
b25zdAorYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3Bl
cnR5SUQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFBy
b3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5
LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0KIAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6
OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQogewogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cyk7CkBAIC03MzcsNyArNzgyLDcgQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
c2V0UHJvcAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3Bl
cnR5KiBzbG90KQordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQ
cm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG90KQogewogI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9u
U2NvcGUodGhpcyk7CkBAIC03NTcsNyArODAyLDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcAogI2VuZGlmCiB9CiAKLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlm
eUNoYW5nZWQpCiB7CiAgICAgQ1NTUHJvcGVydHkgcHJvcGVydHkocHJvcGVydHlJRCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUpLCBpbXBvcnRhbnQpOwogICAgIHNl
dFByb3BlcnR5KHByb3BlcnR5KTsKQEAgLTc2Niw3ICs4MTEsNyBAQCBib29sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3Vi
bGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyB1bml0LCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQogewogICAgIENT
U1Byb3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWUsIHVuaXQpLCBpbXBvcnRhbnQpOwogICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKQEAg
LTc3NSw3ICs4MjAsNyBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9w
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKQordm9pZCBT
dHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNs
YXJhdGlvbikKIHsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwpAQCAtNzkyLDcgKzgzNyw3
IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnBhcnNlRGUKICAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFk
ZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBp
bnQgbnVtUHJvcGVydGllcykKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVy
dGllcyhjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0
aWVzKQogewogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1
dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CkBAIC04MTAsNyArODU1LDcgQEAg
dm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFycwogICAgIC8vIGEgbm90aWZ5
Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Yg
b3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0
eSkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJv
cGVydHkmIHByb3BlcnR5KQogewogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CkBAIC04Mjcs
MTkgKzg3Miw3IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBhcnMKICNl
bmRpZgogfQogCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcHJvcGVydHlDb3VudCgpOwotfQotCi1TdHJpbmcgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBpZiAo
aSA+PSBtX3Byb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydGllc1tp
XS5pZCgpKSk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0
KCkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25zdAogewogICAg
IFN0cmluZyByZXN1bHQgPSAiIjsKIApAQCAtOTAxLDE0ICs5MzQsNyBAQCBTdHJpbmcgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmFzVGV4CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICAvLyBGSVhNRTogRGV0
ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KLSAgICBwYXJzZURlY2xhcmF0aW9uKHRleHQp
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptZXJnZShjb25zdCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGlj
dCkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2UoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
b3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCkKIHsKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQogICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNj
b3BlKHRoaXMpOwpAQCAtOTM0LDkgKzk2MCw5IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246Om1lcmdlKGMKICAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1lbnQgdG8gdGhpcyBm
dW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNs
YXNzLgogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCiB7Ci0g
ICAgQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CisgICAgQ1NTU3R5
bGVTaGVldCogc2hlZXQgPSBjb250ZXh0U3R5bGVTaGVldCgpOwogICAgIHNpemVfdCBzaXplID0g
bV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKICAgICAgICAgbV9wcm9wZXJ0aWVzW2ldLnZhbHVlKCktPmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKHVybHMsIHNoZWV0KTsKQEAgLTk3MCwxNyArOTk2LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQg
YmxvY2tQcm9wZXJ0aWVzW10gPSB7CiAKIGNvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGll
cyA9IFdURl9BUlJBWV9MRU5HVEgoYmxvY2tQcm9wZXJ0aWVzKTsKIAotUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHlC
bG9ja1Byb3BlcnRpZXMoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHls
ZVByb3BlcnR5U2V0Ojpjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Y29weVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7
CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUJsb2NrUHJvcGVy
dGllcygpCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUJsb2NrUHJvcGVydGllcygpCiB7
CiAgICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9w
ZXJ0aWVzKTsKIH0KIAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJv
cGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5
Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNv
bnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKICAg
ICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTAyMSwxNyArMTA0Nyw3IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVAKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om1ha2VNdXRhYmxlKCkKLXsK
LSAgICByZXR1cm4gdGhpczsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdAotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwgbV9wcm9wZXJ0
aWVzKSk7Ci19Ci0KLWNvbnN0IENTU1Byb3BlcnR5KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKSBjb25zdAorY29uc3QgQ1NTUHJv
cGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJ
RCkgY29uc3QKIHsKICAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0aWVzLnNpemUoKSAtIDEgOyBu
ID49IDA7IC0tbikgewogICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBtX3Byb3BlcnRpZXNbbl0u
bV9pZCkKQEAgLTEwNDAsNyArMTA1Niw3IEBAIGNvbnN0IENTU1Byb3BlcnR5KiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXIKICAgICByZXR1cm4gMDsKIH0KIAotQ1NTUHJvcGVydHkqIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpCitDU1NQ
cm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0
eUlEKQogewogICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0g
MDsgLS1uKSB7CiAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lk
KQpAQCAtMTA0OCwxMjUgKzEwNjQsMTkzIEBAIENTU1Byb3BlcnR5KiBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjoKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CisgICAgCitib29sIFN0eWxlUHJv
cGVydHlTZXQ6OnByb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNv
bnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydHktPmlkKCkpOworICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09
IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7Cit9CisgICAgCit2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlKQoreworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9w
cm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5bGUtPnByb3BlcnR5TWF0Y2hlcygmcHJvcGVy
dHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgp
KTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFs
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgp
OyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Cit9
CiAKLUNTU1J1bGUqIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkgY29u
c3QKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29u
c3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHBhcmVudFJ1bGVJ
bnRlcm5hbCgpOworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9w
cm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5TWF0Y2hlcygmcHJv
cGVydHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5p
ZCgpKTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1v
dmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7
Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KDAs
IG1fcHJvcGVydGllcykpOworfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxl
UHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7CisgICAgbGlz
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxz
ZSkpOworICAgIH0KKyAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGxpc3QpOwor
fQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHls
ZURlY2xhcmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3NzU3R5bGVEZWNsYXJhdGlvbikK
KyAgICAgICAgbV9jc3NTdHlsZURlY2xhcmF0aW9uID0gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcykpOworICAg
IHJldHVybiBtX2Nzc1N0eWxlRGVjbGFyYXRpb24uZ2V0KCk7Cit9CisKK3Vuc2lnbmVkIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpOworfQorCitTdHJpbmcgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0Cit7CisgICAgaWYgKGkg
Pj0gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpKQorICAgICAgICByZXR1cm4gIiI7Cisg
ICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX3By
b3BlcnR5U2V0LT5wcm9wZXJ0eUF0KGkpLmlkKCkpKTsKK30KKworQ1NTUnVsZSogUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+cGFyZW50UnVsZUludGVybmFsKCk7CiB9CiAKLVN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CitTdHJpbmcgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXNUZXh0
KCk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFzVGV4dCgpOworfQorICAgIAordm9pZCBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgLy8gRklYTUU6IERl
dGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCisgICAgbV9wcm9wZXJ0eVNldC0+cGFyc2VE
ZWNsYXJhdGlvbih0ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQorU3Ry
aW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25z
dCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKIHsKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKKyAg
ICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0K
IAotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsK
ICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gcHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSA/ICJpbXBvcnRhbnQiIDogIiI7Cisg
ICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkg
PyAiaW1wb3J0YW50IiA6ICIiOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorU3Ry
aW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQ
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhh
bmQocHJvcGVydHlJRCk7CisgICAgaW50IHNob3J0aGFuZElEID0gbV9wcm9wZXJ0eVNldC0+Z2V0
UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CiAgICAgaWYgKCFzaG9ydGhhbmRJRCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKIH0KIAotYm9vbCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKQorYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJ
bXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKICAgICBpbnQgcHJvcGVydHlJ
RCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3Bl
cnR5SUQpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5pc1Byb3BlcnR5SW1wbGljaXQocHJv
cGVydHlJRCk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBp
bXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91
bmQ7CiAgICAgZWMgPSAwOwotICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBv
cnRhbnQsIHRydWUpOworICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsK
ICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBlYyA9
IDA7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIHRydWUpOwor
ICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0cnVl
LCB0cnVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7
IAotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOyAKKyAgICByZXR1
cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsgCiB9CiAK
LVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCiB7IAotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOyAKKyAg
ICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsgCiB9
CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9y
dGFudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsgCiAg
ICAgZWMgPSAwOwotICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQs
IHRydWUpOworICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOworfQorCitDU1NTdHlsZVNoZWV0KiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoreyAKKyAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+Y29udGV4dFN0eWxlU2hlZXQoKTsgCiB9CiAKLVBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5
UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CitQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y29weSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGxp
c3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAg
ICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFs
c2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUobGlzdCk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmNvcHkoKTsKIH0KIAotYm9vbCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1By
b3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJsZSgpCiB7Ci0gICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOwot
ICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgp
LT5jc3NUZXh0KCk7CisgICAgQVNTRVJUKG1fcHJvcGVydHlTZXQtPm1fY3NzU3R5bGVEZWNsYXJh
dGlvbiA9PSB0aGlzIHx8ICghbV9wcm9wZXJ0eVNldC0+bV9jc3NTdHlsZURlY2xhcmF0aW9uICYm
IG1fcHJvcGVydHlTZXQtPmhhc09uZVJlZigpKSk7CisgICAgaWYgKCFtX3Byb3BlcnR5U2V0LT5t
X2Nzc1N0eWxlRGVjbGFyYXRpb24pCisgICAgICAgIG1fcHJvcGVydHlTZXQtPm1fY3NzU3R5bGVE
ZWNsYXJhdGlvbiA9IHRoaXM7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQ7CiB9CiAKLXZvaWQg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNv
bnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVy
dHkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAgIHNp
emVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBt
X3Byb3BlcnRpZXNbaV07Ci0gICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRjaGVzKCZw
cm9wZXJ0eSkpCi0gICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5
LmlkKCkpOwotICAgIH0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJl
bW92YWwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5z
aXplKCk7ICsraSkKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ld
KTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRjaGVzKHByb3BlcnR5KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwzMyArMzEsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogCi1j
bGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0
aW9uIHsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVBy
b3BlcnR5U2V0PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oKTsKKyAgICB+U3R5bGVQcm9wZXJ0eVNldCgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKENTU1J1bGUqIHBhcmVudFJ1
bGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1J1
bGUqIHBhcmVudFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBhcmVudFJ1bGUpKTsKICAgICB9Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNyZWF0ZShDU1NSdWxlKiBw
YXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRpZXMsIGludCBudW1Q
cm9wZXJ0aWVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0
ZShDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRp
ZXMsIGludCBudW1Qcm9wZXJ0aWVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihwYXJlbnRSdWxlLCBwcm9wZXJ0aWVzLCBudW1Q
cm9wZXJ0aWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNl
dChwYXJlbnRSdWxlLCBwcm9wZXJ0aWVzLCBudW1Qcm9wZXJ0aWVzKSk7CiAgICAgfQotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjcmVhdGUoY29uc3Qg
VmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVy
dGllcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oMCwgcHJvcGVydGllcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0eWxlUHJvcGVydHlTZXQoMCwgcHJvcGVydGllcykpOwogICAgIH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlSW5saW5lKFN0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
Y3JlYXRlSW5saW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgeyAKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihlbGVtZW50KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChlbGVtZW50KSk7CiAg
ICAgfQogCisgICAgdm9pZCBkZXJlZigpOworCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNFbXB0eSgpOyB9CiAgICAgY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydGllc1tpbmRleF07IH0KQEAgLTY4LDggKzcxLDYgQEAgcHVibGljOgogICAgIGludCBnZXRQ
cm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAgICAgYm9vbCBpc1Byb3Bl
cnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0KICAgICBib29s
IHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0g
ZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQs
IHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91YmxlIHZh
bHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50ID0g
ZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCB1bml0LCBpbXBv
cnRhbnQsIHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJv
cGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSk7IH0KQEAgLTg3LDExICs4
OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBkb2VzIG5vIGNoYW5nZSBub3RpZmljYXRpb25z
IHNpbmNlIGl0J3Mgb25seSBjYWxsZWQgYnkgY3JlYXRlTWFya3VwLgogICAgIHZvaWQgYWRkUGFy
c2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQgcmVtb3ZlUHJvcGVy
dGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmVtb3ZlUHJvcGVy
dGllc0luU2V0KHNldCwgbGVuZ3RoLCB0cnVlKTsgfQogCi0gICAgdm9pZCBtZXJnZShjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9
IHRydWUpOworICAgIHZvaWQgbWVyZ2UoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgYXJn
T3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwogCiAgICAgdm9pZCBzZXRTdHJpY3RQYXJzaW5n
KGJvb2wgYikgeyBtX3N0cmljdFBhcnNpbmcgPSBiOyB9CiAgICAgYm9vbCB1c2VTdHJpY3RQYXJz
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9CkBAIC05OSwxMiArMTAwLDE0
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mKTsKIAorICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNv
bnN0OwogICAgIC8vIFVzZWQgYnkgU3R5bGVkRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMoKS4KLSAgICB2b2lkIGNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY29weVByb3BlcnRpZXNGcm9tKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQmKTsKIAorICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCopOwogICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRp
ZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwogCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3Q7CiAKICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBt
X2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA/IDAgOiBtX3BhcmVudC5ydWxlOyB9CiAgICAgdm9p
ZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVCghbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24p
OyBtX3BhcmVudC5ydWxlID0gMDsgfQpAQCAtMTE1LDMyICsxMTgsMTUgQEAgcHVibGljOgogICAg
IENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3Q7CiAgICAgCiAgICAgU3Ry
aW5nIGFzVGV4dCgpIGNvbnN0OworICAgIAorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3Vy
ZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1
bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mKTsKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSog
Y29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKFN0eWxlZEVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKLQotICAgIC8vIENTU09NIGZ1bmN0aW9u
cy4gRG9uJ3QgbWFrZSB0aGVzZSBwdWJsaWMuCi0gICAgdmlydHVhbCBDU1NSdWxlKiBwYXJlbnRS
dWxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3Jp
dHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFBy
b3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNT
U1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJv
cGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgU3R5bGVQcm9wZXJ0eVNldCgpOworICAg
IFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSk7CisgICAgU3R5bGVQcm9wZXJ0
eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+Jik7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0
eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOworICAgIFN0eWxlUHJvcGVydHlTZXQoU3R5
bGVkRWxlbWVudCopOwogCiAgICAgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKQEAgLTE2
MSw5ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5n
ZWQpOwogICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJv
b2wgbm90aWZ5Q2hhbmdlZCk7CiAgICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJl
dHVybiBjb250ZXh0U3R5bGVTaGVldCgpOyB9CisgICAgYm9vbCBwcm9wZXJ0eU1hdGNoZXMoY29u
c3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKIAogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmaW5kUHJv
cGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OwogICAgIENTU1Byb3BlcnR5KiBmaW5k
UHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpOwpAQCAtMTc4LDcgKzE2MiwxMSBAQCBwcml2
YXRlOgogICAgICAgICBQYXJlbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVs
ZW1lbnQpIHsgfQogICAgICAgICBDU1NSdWxlKiBydWxlOwogICAgICAgICBTdHlsZWRFbGVtZW50
KiBlbGVtZW50OwotICAgIH0gbV9wYXJlbnQ7ICAgIAorICAgIH0gbV9wYXJlbnQ7CisgICAgCisg
ICAgbXV0YWJsZSBSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uPiBtX2Nzc1N0
eWxlRGVjbGFyYXRpb247CisgICAgCisgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYWdlUnVsZS5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFnZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xh
c3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDU1NTZWxlY3Rvckxpc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0NvbG9yUHJvcGVydHlJRChpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBib29s
IHBhcnNlQ29sb3JWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24s
IGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJv
b2wgc3RyaWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApCitzdGF0aWMg
Ym9vbCBwYXJzZUNvbG9yVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3Ry
aWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApCiB7CiAgICAgaWYgKCFz
dHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQwOSw3ICs0MDksNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0CiAgICAgfQogfQogCi1z
dGF0aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBkZWNsYXJhdGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBi
b29sIGltcG9ydGFudCwgYm9vbCBzdHJpY3QsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNo
ZWV0ID0gMCkKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoU3R5bGVQcm9wZXJ0
eVNldCogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCA9IDApCiB7CiAgICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzOwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGVWYWx1CiAgICAgcmV0dXJuIHBhcnNlci5wYXJz
ZVZhbHVlKG1hcHBlZEF0dHJpYnV0ZS0+ZGVjbGFyYXRpb24oKSwgcHJvcGVydHlJZCwgdmFsdWUs
IGZhbHNlLCBlbGVtZW50U2hlZXQpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KQorYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3Ry
aWN0KQogewogICAgIGlmIChwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9w
ZXJ0eUlkLCBzdHJpbmcsIGltcG9ydGFudCwgc3RyaWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC01MDgsNyArNTA4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTTXV0YWJs
ZVN0eQogICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJ
ZCwgc3RyaW5nLCBpbXBvcnRhbnQpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRl
eHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNl
dCogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIGlm
IChjb250ZXh0U3R5bGVTaGVldCkKICAgICAgICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVT
aGVldCk7CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3Io
Y29uc3QgU3RyaQogICAgIEFTU0VSVChkdW1teVN0eWxlU2hlZXQtPmhhc09uZVJlZigpKTsKIH0K
IAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxl
U291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0
KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNvdXJj
ZURhdGE+KiBzdHlsZVNvdXJjZURhdGEsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0
KQogewogICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAxNTsKQEAgLTg4NDcsNyArODg0
Nyw3IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3QKICAgICAgICAg
cnVsZS0+YWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFz
Rm9udEZhY2VPbmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVz
KCk7Ci0gICAgICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKHJ1bGUuZ2V0KCksIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9w
ZXJ0aWVzKSk7CiAgICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAgICAgIG1fcGFyc2Vk
UnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICAgICAgaWYgKG1fcnVsZVJhbmdlTWFw
KSB7CkBAIC04ODg2LDcgKzg4ODYsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRG
YWNlUnVsZSgpCiAgICAgICAgIH0KICAgICB9CiAgICAgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4g
cnVsZSA9IENTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCk7Ci0gICAgcnVsZS0+
c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdl
dCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIHJ1
bGUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShydWxlLmdldCgpLCBt
X3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwogICAgIGNsZWFyUHJv
cGVydGllcygpOwogICAgIENTU0ZvbnRGYWNlUnVsZSogcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAg
ICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CkBAIC04OTU3LDcgKzg5NTcs
NyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NPCiAgICAgICAgIFZl
Y3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2VsZWN0b3JWZWN0b3I7CiAgICAgICAg
IHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAgICBydWxlLT5hZG9w
dFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcnVsZS0+c2V0RGVjbGFy
YXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBtX3Bh
cnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgICAgICBydWxlLT5z
ZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJz
ZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcGFnZVJ1bGUg
PSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2Uo
KSk7CiAgICAgfQpAQCAtOTA0MSw3ICs5MDQxLDcgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBD
U1NQYXJzZXI6OmNyZWF0ZQogCiAgICAgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5
ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOwogICAg
IGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZyk7Ci0gICAga2V5ZnJhbWUtPnNldERlY2xh
cmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoa2V5ZnJhbWUuZ2V0KCks
IG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAga2V5ZnJh
bWUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShrZXlmcmFtZS5nZXQo
KSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKIAogICAgIGNs
ZWFyUHJvcGVydGllcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAx
MDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWU7CiBjbGFzcyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWNs
YXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7
CiBjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDU1NQcm9wZXJ0eTsKQEAgLTU4LDYgKzU3LDcg
QEAgY2xhc3MgQ1NTV3JhcFNoYXBlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBNZWRpYUxpc3Q7
CiBjbGFzcyBNZWRpYVF1ZXJ5RXhwOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIGNsYXNzIFN0
eWxlZEVsZW1lbnQ7CiBjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CiBjbGFzcyBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlOwpAQCAtNzAsMTEgKzcwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHBh
cnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydExpbmVOdW1i
ZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFwID0gMCk7CiAgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwog
ICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBwYXJzZUtleWZyYW1lUnVsZShD
U1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1
ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYs
IGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCk7CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1
ZShTdHlsZVByb3BlcnR5U2V0KiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgc3RyaWN0KTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYg
Y29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBi
b29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1l
bnQqKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0
aXZlKGludCBwcm9wSWQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0
aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPENT
U1N0eWxlU291cmNlRGF0YT4qID0gMCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQg
PSAwKTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0
IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiA9IDAsIENTU1N0eWxlU2hlZXQq
IGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CiAgICAgYm9vbCBwYXJzZU1lZGlhUXVlcnkoTWVkaWFM
aXN0KiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgYm9vbCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZVZhbHVlKENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiwgU3R5bGVkRWxlbWVudCos
IGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKENTU1BhcnNlclZhbHVlKikgY29u
c3Q7CiAgICAgYm9vbCBwYXJzZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCosIFJl
ZlB0cjxDU1NWYWx1ZT4mKTsKIAotICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBD
U1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApOworICAgIGJvb2wgcGFyc2VWYWx1
ZShTdHlsZVByb3BlcnR5U2V0KiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBv
cnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CiAKICAgICBlbnVt
IFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgTm9uZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAg
KzI3LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb247CiBjbGFzcyBDU1NQcm9wZXJ0eTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBj
bGFzcyBDU1NWYWx1ZTsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZWRFbGVt
ZW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNTksOCArNTksOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3Bl
cnR5SUQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gY29weSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpID0gMDsKIAogICAgIHZpcnR1
YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkocmV2aXNpb24gMTA2
NjYwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNSArNDMsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyBzZWxlY3RvclRleHQoKSBj
b25zdDsKICAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKIAotICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsg
fQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOyB9CiAKICAgICBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OwogCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVj
dG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKSB7IEFTU0VSVChzdHlsZS0+cGFy
ZW50UnVsZUludGVybmFsKCkgPT0gdGhpcyk7IG1fc3R5bGUgPSBzdHlsZTsgfQorICAgIHZvaWQg
c2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBBU1NF
UlQoc3R5bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOyBtX3N0eWxlID0gc3R5bGU7
IH0KIAogICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rvckxpc3Q7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgU3R5bGVQ
cm9wZXJ0eVNldCogZGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9
CiAKICAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1
cmxzKTsKIApAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYW51cCgpOwog
ICAgIFN0cmluZyBnZW5lcmF0ZVNlbGVjdG9yVGV4dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAgIFJlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBtX3N0eWxlOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlzdDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9u
IDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk3LDE3ICsyOTcsMTcgQEAgc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIHByaW50RQogICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7CiB9CiAKLXN0YXRp
YyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCitz
dGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCiB7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBs
ZWZ0VG9SaWdodERlY2wsIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgbGVmdFRv
UmlnaHREZWNsLCAoU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKICAgICBpZiAobGVmdFRv
UmlnaHREZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKICAgICByZXR1cm4gbGVmdFRv
UmlnaHREZWNsLmdldCgpOwogfQogCi1zdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQorc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0
VG9MZWZ0RGVjbGFyYXRpb24oKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgcmlnaHRUb0xlZnREZWNsLCAoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4sIHJpZ2h0VG9MZWZ0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZSgpKSk7CiAgICAgaWYgKHJpZ2h0VG9MZWZ0RGVjbC0+aXNFbXB0eSgpKQogICAgICAg
ICByaWdodFRvTGVmdERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NW
YWx1ZVJ0bCk7CiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKQEAgLTc0Nyw3ICs3
NDcsNyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFCiAgICAgQVNT
RVJUX1VOVVNFRChsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCwgbG9hZGVkTWF0aE1MVXNlckFn
ZW50U2hlZXQgfHwgZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpLnNpYmxpbmdSdWxlcy5pc0VtcHR5
KCkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgdW5zaWduZWQgbGlu
a01hdGNoVHlwZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9u
KFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5
cGUpCiB7CiAgICAgbV9tYXRjaGVkRGVjbHMuZ3JvdyhtX21hdGNoZWREZWNscy5zaXplKCkgKyAx
KTsKICAgICBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiYgbmV3RGVjbGFyYXRpb24gPSBtX21hdGNo
ZWREZWNscy5sYXN0KCk7CkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojpjb2xsZWN0TWF0Y2hpbmdSdQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBw
bHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KLSAgICAgICAgICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwog
ICAgICAgICAgICAgaWYgKCFkZWNsIHx8IChkZWNsLT5pc0VtcHR5KCkgJiYgIWluY2x1ZGVFbXB0
eVJ1bGVzKSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
TWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MTAxMyw3ICsxMDEzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1h
dAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25z
LgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwg
bWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0
dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMg
b2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgaWYgKFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gYWRkaXRpb25hbFN0eWxlID0gbV9zdHlsZWRFbGVtZW50LT5hZGRpdGlv
bmFsQXR0cmlidXRlU3R5bGUoKSkgeworICAgICAgICBpZiAoUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IGFkZGl0aW9uYWxTdHlsZSA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlKCkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9
IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0CiAKICAgICAvLyBOb3cgY2hl
Y2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNs
KCk7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZURlY2wgPSBtX3N0eWxlZEVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpOwogICAgICAgICBpZiAoaW5saW5lRGVjbCkgewogICAgICAg
ICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUo
KTsKICAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9PSAtMSkK
QEAgLTE1NzAsNyArMTU3MCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2Vs
ZWN0b3IKICNlbmRpZgogCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMg
dG8gdGhlIGtleWZyYW1lLgotICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lUnVsZS0+ZGVjbGFyYXRpb24oKSkgeworICAgIGlmIChT
dHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWVSdWxlLT5kZWNsYXJh
dGlvbigpKSB7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0
aW9uLT5wcm9wZXJ0eUNvdW50KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
cm9wZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAgICAgIGludCBwcm9wZXJ0eSA9IHN0eWxlRGVj
bGFyYXRpb24tPnByb3BlcnR5QXQoaSkuaWQoKTsKQEAgLTI0MzUsNyArMjQzNSw3IEBAIHN0YXRp
YyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHIKICAgICByZXR1cm4gY29udmVydFRv
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB0cnVlLCBtdWx0aXBsaWVy
LCBvayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0luc2lkZVJlZ2lvblJ1bGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNJbnNpZGVSZWdpb25SdWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24p
CiB7CiAgICAgQVNTRVJUKHN0eWxlRGVjbGFyYXRpb24pOwogCkBAIC0yNDQ5LDcgKzI0NDksNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbnNpZGVSZWdpb25SdWxlKENTCiB9CiAKIHRlbXBsYXRl
IDxib29sIGFwcGx5Rmlyc3Q+Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uLCBib29sIGlz
SW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nl
c3NSdWxlKGRvY3VtZW50KCksIHN0eWxlRGVjbGFyYXRpb24tPnBhcmVudFJ1bGVJbnRlcm5hbCgp
KTsKICAgICBib29sIHN0eWxlRGVjbGFyYXRpb25JbnNpZGVSZWdpb25SdWxlID0gbV9yZWdpb25G
b3JTdHlsaW5nID8gaXNJbnNpZGVSZWdpb25SdWxlKHN0eWxlRGVjbGFyYXRpb24pIDogZmFsc2U7
CkBAIC0yNTAxLDcgKzI1MDEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFy
YXRpb25zCiAKICAgICBpZiAobV9zdHlsZS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmsp
IHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkg
ewotICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRp
b24gPSBtX21hdGNoZWREZWNsc1tpXS5zdHlsZURlY2xhcmF0aW9uLmdldCgpOworICAgICAgICAg
ICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IG1fbWF0Y2hlZERlY2xzW2ld
LnN0eWxlRGVjbGFyYXRpb24uZ2V0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hU
eXBlID0gbV9tYXRjaGVkRGVjbHNbaV0ubGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhh
dCByZXF1aXJlcyBjaGFuZ2VzIGluIG1hbnkgcGxhY2VzLgogICAgICAgICAgICAgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaExpbms7CkBAIC0yNzIwLDcgKzI3MjAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzRm9yCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiB0
aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCi0gICAg
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24o
KTsKKyAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7
CiAgICAgICAgIGlmICghZGVjbCB8fCBkZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lv
biAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gRVNt
YXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwg
VXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKIAogY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwot
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NQYWdlUnVsZTsKIGNs
YXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgQ1NTUHJvcGVydHk7CkBAIC03MCw2ICs2OSw3
IEBAIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBj
bGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBT
dHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKQEAg
LTI1OSw3ICsyNTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVu
dCopOwogCiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBt
X21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLSAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJh
dGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUg
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKTsKKyAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJh
dGlvbihTdHlsZVByb3BlcnR5U2V0KiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hBbGwpOwogCiAgICAgc3RydWN0IE1hdGNoUmFuZ2VzIHsKICAgICAgICAg
TWF0Y2hSYW5nZXMoKSA6IGZpcnN0VUFSdWxlKC0xKSwgbGFzdFVBUnVsZSgtMSksIGZpcnN0QXV0
aG9yUnVsZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwgZmlyc3RVc2VyUnVsZSgtMSksIGxhc3RV
c2VyUnVsZSgtMSkgeyB9CkBAIC0yOTQsNyArMjk0LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZSA8Ym9vbCBmaXJzdFBhc3M+CiAgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9y
dGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsK
ICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9pZCBhcHBseURlY2xhcmF0aW9u
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhl
cml0ZWRPbmx5KTsKKyAgICB2b2lkIGFwcGx5RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCos
IGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAKICAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShpbnQgaWQpOwogCkBAIC0zNzUsNyArMzc1LDcg
QEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24gewogICAgICAg
ICBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbigpIDogcG9zc2libHlQYWRkZWRNZW1iZXIoMCkgeyB9
CiAKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZURlY2xh
cmF0aW9uOworICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVEZWNsYXJhdGlv
bjsKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZTsK
ICAgICAgICAgICAgIC8vIFVzZWQgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0
aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRlIHRoZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMg
b2JqZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIFN0cmluZyBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6c2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUpCit2b2lkIFdlYktpdENTU0tleWZyYW1l
UnVsZTo6c2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkK
IHsKICAgICBBU1NFUlQoc3R5bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOwogICAg
IG1fc3R5bGUgPSBzdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTkgKzUzLDE5IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZ2V0S2V5cyhWZWN0b3I8ZmxvYXQ+JiBrZXlzKSBjb25zdCAgIHsg
cGFyc2VLZXlTdHJpbmcobV9rZXksIGtleXMpOyB9CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxl
RGVjbGFyYXRpb24oKTsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAotICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0
aW9uKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCiBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3RyaW5nKGNvbnN0IFN0cmluZyYgcywgVmVjdG9yPGZsb2F0PiYga2V5
cyk7CiAKICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KTsK
IAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKKyAgICBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9zdHlsZTsKICAgICBTdHJpbmcgbV9rZXk7ICAgICAg
ICAvLyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBrZXlzCiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgV2ViS2l0Q1NTTWF0cml4Ojp+V2ViS2l0Q1NTTWF0cml4KCkKIAogdm9pZCBXZWJLaXRD
U1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
RGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlRGVjbGFyYXRpb24gPSBTdHlsZVByb3BlcnR5
U2V0OjpjcmVhdGUoKTsKICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlRGVjbGFy
YXRpb24uZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUsIHRy
dWUpKSB7CiAgICAgICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3BlcmF0aW9ucy4gVGhpcyBj
YW4gZmFpbCBpZiBhIHByb3BlcnR5CiAgICAgICAgIC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBw
YXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F0dHIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCShyZXZpc2lvbiAxMDY2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzSWQoKSBjb25zdDsKIAogICAgIC8vIEFuIGV4
dGVuc2lvbiB0byBnZXQgcHJlc2VudGF0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGF0dHJpYnV0ZXMu
Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBtX2F0dHJpYnV0ZS0+
ZGVjbCgpOyB9CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBtX2F0
dHJpYnV0ZS0+ZGVjbCgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7IH0KIAogICAgIHZv
aWQgc2V0U3BlY2lmaWVkKGJvb2wgc3BlY2lmaWVkKSB7IG1fc3BlY2lmaWVkID0gc3BlY2lmaWVk
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGNsb25lKCkgY29u
c3Q7CiAgICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2woKSBjb25zdCB7
IHJldHVybiBtX21hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uID8gbV9tYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbi0+ZGVjbGFyYXRpb24oKSA6IDA7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiA/IG1fbWFw
cGVkQXR0cmlidXRlRGVjbGFyYXRpb24tPmRlY2xhcmF0aW9uKCkgOiAwOyB9CiAKICAgICBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogbWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX21hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmdldCgpOyB9CiAgICAg
dm9pZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU01hcHBlZEF0
dHJpYnV0ZURlY2xhcmF0aW9uPiBkZWNsKSB7IG1fbWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24g
PSBkZWNsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ1NTTWFwcGVkQXR0
cmlidXRlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDExICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZU1hcHBlZFByb3BlcnR5KFN0
eWxlZEVsZW1lbnQqLCBpbnQgcHJvcGVydHlJZCk7CiAgICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJhdGlvbi5n
ZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZWNsYXJhdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uKCkKLSAgICAgICAgOiBtX2RlY2xhcmF0aW9uKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoKSkKKyAgICAgICAgOiBtX2RlY2xhcmF0aW9uKFN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpKQogICAgICAgICAsIG1fZW50cnlUeXBlKGVOb25lKQogICAgICAg
ICAsIG1fYXR0ck5hbWUoYW55UU5hbWUoKSkKICAgICB7CkBAIC03MCw3ICs3MCw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVkRWxlbWVudCopOwogCi0g
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlY2xhcmF0aW9uOworICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2RlY2xhcmF0aW9uOwogICAgIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5IG1fZW50cnlUeXBlOwogICAgIFF1YWxpZmllZE5hbWUgbV9hdHRyTmFtZTsKICAg
ICBBdG9taWNTdHJpbmcgbV9hdHRyVmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxMSw3ICs4MTEsNyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBE
b2N1bWVudDo6Y3JlYXRlCiAKIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gRG9jdW1l
bnQ6OmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKQogewotICAgIHJldHVybiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CiB9CiAKIFBhc3NSZWZQdHI8
Tm9kZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWROb2RlLCBib29sIGRlZXAs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZh
dGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbV9pbmxpbmVTdHlsZURlY2w7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1faW5s
aW5lU3R5bGVEZWNsOwogICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwogICAgIEF0
b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lZE5vZGVNYXAuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTmFtZWROb2RlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDExICszMjEsMTEgQEAg
Ym9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IAogICAgIHJldHVybiB0cnVl
OwogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogTmFtZWROb2RlTWFwOjplbnN1cmVJ
bmxpbmVTdHlsZURlY2woKQorU3R5bGVQcm9wZXJ0eVNldCogTmFtZWROb2RlTWFwOjplbnN1cmVJ
bmxpbmVTdHlsZURlY2woKQogewogICAgIGlmICghYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0
eWxlRGVjbCkgewogICAgICAgICBBU1NFUlQobV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSk7
Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wgPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlSW5saW5lKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihtX2VsZW1lbnQpKTsKKyAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVj
bCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZUlubGluZShzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4obV9lbGVtZW50KSk7CiAgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHls
ZURlY2wtPnNldFN0cmljdFBhcnNpbmcobV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIW1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgIH0KICAgICByZXR1cm4g
YXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTmFtZWROb2RlTWFwLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lZE5vZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6
CiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSB7IHJldHVybiAmbV9h
dHRyaWJ1dGVEYXRhOyB9CiAgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0
ZURhdGEoKSBjb25zdCB7IHJldHVybiAmbV9hdHRyaWJ1dGVEYXRhOyB9CiAKLSAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gYXR0cmlidXRl
RGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbC5nZXQoKTsgfQotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0
KiBpbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5
bGVEZWNsLmdldCgpOyB9CisgICAgU3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlSW5saW5lU3R5bGVE
ZWNsKCk7CiAgICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRl
CiAgICAgQVNTRVJUKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQoKSk7CiAgICAgc2V0SXNTdHlsZUF0
dHJpYnV0ZVZhbGlkKCk7CiAgICAgc2V0SXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsK
LSAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlID0gaW5saW5l
U3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gaW5s
aW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHRoaXMp
LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgIGNs
ZWFySXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsKIH0KQEAgLTQwNSw3ICs0MDUsNyBA
QCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wCiAgICAgaWYgKCFzb3Vy
Y2UtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
KyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVj
bCgpOwogICAgIGlubGluZVN0eWxlLT5jb3B5UHJvcGVydGllc0Zyb20oKnNvdXJjZS0+aW5saW5l
U3R5bGVEZWNsKCkpOwogICAgIGlubGluZVN0eWxlLT5zZXRTdHJpY3RQYXJzaW5nKHNvdXJjZS0+
aW5saW5lU3R5bGVEZWNsKCktPnVzZVN0cmljdFBhcnNpbmcoKSk7CiAKQEAgLTQxNyw3ICs0MTcs
NyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wCiAKIHZvaWQgU3R5
bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JiB1cmxzKSBjb25zdAogewotICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5s
aW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKKyAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCog
aW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgaW5saW5lU3R5bGUtPmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBnZXRNYXBwZWRBdHRyaWJ1
dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9p
ZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBBdHRyaWJ1dGUq
LCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiopOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUo
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIGludmFs
aWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZU1hcCgpID8gYXR0cmli
dXRlTWFwKCktPmlubGluZVN0eWxlRGVjbCgpIDogMDsgfQotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1
dGVNYXAoKS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7IH0KLSAgICB2aXJ0dWFsIENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZFUlJJREUgeyByZXR1cm4gZW5zdXJlSW5saW5lU3R5bGVE
ZWNsKCk7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2woKSBjb25zdCB7
IHJldHVybiBhdHRyaWJ1dGVNYXAoKSA/IGF0dHJpYnV0ZU1hcCgpLT5pbmxpbmVTdHlsZURlY2wo
KSA6IDA7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7
IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVNYXAoKS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7IH0K
KyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZFUlJJREUgeyByZXR1
cm4gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsg
fQogCiAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcygpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2
aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIH0KICAgICAgICAgbGFzdFN0eWxlZE5v
ZGUgPSBub2RlOwogCi0gICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVT
dHlsZURlY2wgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgU3R5
bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRGb250U2l6ZSA9IGNvbXB1dGVkRm9udFNp
emUobm9kZSk7CiAgICAgICAgIGZsb2F0IGRlc2lyZWRGb250U2l6ZSA9IG1heChNaW5pbXVtRm9u
dFNpemUsIHN0YXJ0aW5nRm9udFNpemVzLmdldChub2RlKSArIHN0eWxlLT5mb250U2l6ZURlbHRh
KCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVEZWNsLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpOwpAQCAtNTExLDcgKzUxMSw3
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUVtYmVkZGluZ1UKICAgICAgICAgICAg
IC8vIG90aGVyIGF0dHJpYnV0ZXMsIGxpa2Ugd2UgKHNob3VsZCkgZG8gd2l0aCBCIGFuZCBJIGVs
ZW1lbnRzLgogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBkaXJBdHRy
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2wo
KS0+Y29weSgpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0
eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKICAgICAgICAg
ICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NW
YWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50
LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CkBAIC03MjUsNyArNzI1LDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGluZSBzdHls
ZSBhbmQgc2tpcCBvdmVyIGl0cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+Y29weSgpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsK
ICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZShzdHlsZS0+c3R5bGUoKSk7CiAgICAgICAg
ICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFz
VGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CkBAIC04OTAsNyArODkwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5
bGUoRQogICAgIGlmICghc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChl
bGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgcHJvcGVydGllcykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZSA9IGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxl
ID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgQVNTRVJUKGlubGluZVN0eWxlKTsK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBhIG1hc3MtcmVtb3ZhbCBmdW5jdGlvbiBoZXJl
IGJ1dCB3ZSBkb24ndCBoYXZlIGFuIHVuZG9hYmxlIG9uZSB5ZXQuCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgaSsrKQpAQCAtMTMxMCw3ICsxMzEwLDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKTsK
LSAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBibG9jay0+aW5saW5l
U3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGRlY2wgPSBibG9jay0+aW5s
aW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+YXNUZXh0KCk7CiAgICAg
c2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0KTsKIH0KQEAgLTEzNzUs
NyArMTM3NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWYKIAog
ICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIGlmIChz
dHlsZUNvbnRhaW5lcikgewotICAgICAgICAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBleGlzdGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0eWxlRGVjbCgpKQor
ICAgICAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNv
bnRhaW5lci0+aW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJp
YnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxlLT5hc1RleHQoKSAr
IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVDaGFu
Z2UuY3NzU3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNSw3ICsyMDUsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0
CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKICAgICBjb250YWluZXItPnNldElkQXR0cmli
dXRlKGNvbnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKIAotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSA9IGNvbnRhaW5lci0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBjb250YWluZXItPmVuc3VyZUlubGluZVN0eWxl
RGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFn
LCBDU1NWYWx1ZU5vbmUpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dFVzZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVSZWFkT25seSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDcgKzgzLDcgQEAgc3RhdGljIGNvbnN0IGludCBlZGl0aW5nUHJvcGVydGllc1tdID0gewogZW51
bSBFZGl0aW5nUHJvcGVydGllc1R5cGUgeyBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGll
cywgQWxsRWRpdGluZ1Byb3BlcnRpZXMgfTsKIAogdGVtcGxhdGUgPGNsYXNzIFN0eWxlRGVjbGFy
YXRpb25UeXBlPgotc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlFZGl0aW5nUHJvcGVydGllcyhTdHlsZURlY2xhcmF0aW9uVHlwZSogc3R5bGUsIEVkaXRp
bmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMp
CitzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5RWRpdGluZ1Byb3BlcnRp
ZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUqIHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1R5cGUgdHlw
ZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQogewogICAgIGlmICh0eXBlID09
IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNvcHlQcm9wZXJ0
aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgoZWRpdGluZ1Byb3Bl
cnRpZXMpKTsKQEAgLTk5LDE3ICs5OSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5n
UHJvcGVydHkoaW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUo
UGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBFZGl0aW5nUHJv
cGVydGllc1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQorc3Rh
dGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVk
U3R5bGUoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBFZGl0
aW5nUHJvcGVydGllc1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVz
KQogewogICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUoKTsKICAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlLmdldCgpLCB0eXBl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJv
cGVydGllc05vdEluKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlV2l0aFJlZHVuZGFudFByb3Bl
cnRpZXMsIENTU1N0eWxlRGVjbGFyYXRpb24qIGJhc2VTdHlsZSk7CitzdGF0aWMgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0eVNldCog
c3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0
eWxlKTsKIGVudW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUs
IFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9Owogc3RhdGljIGludCBs
ZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCosIENTU1ByaW1pdGl2ZVZhbHVlKiwg
Ym9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgTGVnYWN5Rm9udFNpemVNb2RlKTsK
K3N0YXRpYyBib29sIGlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKENTU1ZhbHVlKik7CiBzdGF0aWMg
Ym9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKik7
CitzdGF0aWMgYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihTdHlsZVByb3BlcnR5
U2V0Kik7CiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3VuZENvbG9ySW5FZmZl
Y3QoTm9kZSopOwogCiBjbGFzcyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpAQCAtMTIyLDggKzEy
NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEVxdWl2YWxlbnQoKSB7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7
IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoKm1fdGFnTmFtZSk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsgfQotICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJl
c2VudEluU3R5bGUoRWxlbWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUobV9wcm9wZXJ0eUlEKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5
bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YWRkVG9TdHlsZShFbGVtZW50KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
QEAgLTE1NSw3ICsxNTcsNyBAQCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OkhUTUxFbGVtZW50RXF1
aXZhCiAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlICE9IENTU1ZhbHVlSW52YWxpZCk7CiB9CiAK
LWJvb2wgSFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVu
dCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAorYm9v
bCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBl
bGVtZW50LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKIHsKICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsK
ICAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiB2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpICYmIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkp
LT5nZXRJZGVudCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCk7CkBAIC0xNzIsOCAr
MTc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1M
VGV4dERlY29yYXRpb25FcXVpdmFsZW50KHByaW1pdGl2ZVZhbHVlLCB0YWdOYW1lKSk7CiAgICAg
fQotICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0
eWxlKEVsZW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxl
UHJvcGVydHlTZXQqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MVGV4dERlY29yYXRpb25F
cXVpdmFsZW50KGludCBwcmltaXRpdmVWYWx1ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSk7CkBAIC0xODUsMTIgKzE4NywxMiBAQCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50OjpI
VE1MVGV4dERlCiB7CiB9CiAKLWJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJv
cGVydHlFeGlzdHNJblN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29u
c3QKK2Jvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0
eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKTsKIH0KIAotYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlzUHJl
c2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKSBjb25zdAorYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlz
UHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
CiAgICAgaWYgKCFzdHlsZVZhbHVlKQpAQCAtMjExLDcgKzIxMyw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtKSBjb25zdCB7IHJldHVybiBIVE1MRWxl
bWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxlbSkgJiYgZWxlbS0+aGFzQXR0cmlidXRlKG1fYXR0
ck5hbWUpOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQq
LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50KiwgRWRpdGluZ1N0eWxlKikgY29u
c3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBhdHRyaWJ1dGVWYWx1ZUFzQ1NT
VmFsdWUoRWxlbWVudCopIGNvbnN0OwogICAgIGlubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZTsgfQpAQCAtMjM0LDcgKzIz
Niw3IEBAIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjpIVE1MQXR0cmlidXRlRXEKIHsKIH0KIAot
Ym9vbCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1l
bnQqIGVsZW1lbnQsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKK2Jv
b2wgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50
KiBlbGVtZW50LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKGVsZW1lbnQpOwogICAg
IFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KG1fcHJvcGVydHlJRCk7CkBAIC0yNTYsOCArMjU4LDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
SFRNTEF0dHJpYnV0ZUVxdWl2YQogICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlKG1fYXR0
ck5hbWUpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGR1bW15U3R5bGU7Ci0gICAgZHVtbXlTdHlsZSA9IENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
ZHVtbXlTdHlsZTsKKyAgICBkdW1teVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7
CiAgICAgZHVtbXlTdHlsZS0+c2V0UHJvcGVydHkobV9wcm9wZXJ0eUlELCBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUobV9hdHRyTmFtZSkpOwogICAgIHJldHVybiBkdW1teVN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CiB9CkBAIC0zMTIsNiArMzE0LDE0IEBAIEVkaXRpbmdT
dHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW8KICAgICBpbml0KHBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCksIHByb3BlcnRpZXNUb0luY2x1ZGUpOwogfQogCitFZGl0aW5nU3R5bGU6OkVk
aXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKKyAgICA6IG1fbXV0YWJs
ZVN0eWxlKHN0eWxlID8gc3R5bGUtPmNvcHkoKSA6IDApCisgICAgLCBtX3Nob3VsZFVzZUZpeGVk
RGVmYXVsdEZvbnRTaXplKGZhbHNlKQorICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRh
KQoreworICAgIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7Cit9CisKIEVkaXRpbmdTdHlsZTo6RWRp
dGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIDogbV9tdXRh
YmxlU3R5bGUoc3R5bGUgPyBzdHlsZS0+Y29weSgpIDogMCkKICAgICAsIG1fc2hvdWxkVXNlRml4
ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCkBAIC0zNTEsNiArMzYxLDExIEBAIHN0YXRpYyBpbmxp
bmUgUkdCQTMyIGdldFJHQkFGb250Q29sb3IoQ1MKICAgICByZXR1cm4gY3NzVmFsdWVUb1JHQkEo
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUNvbG9yKS5nZXQo
KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIGdldFJHQkFGb250Q29sb3IoU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUpCit7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKHN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKK30KKwogc3RhdGljIGlu
bGluZSBSR0JBMzIgcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUqIG5vZGUpCiB7CiAg
ICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGJhY2tncm91bmRDb2xvckluRWZmZWN0KG5vZGUpLmdl
dCgpKTsKQEAgLTM5Nyw3ICs0MTIsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJvCiB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewogICAgIGlmICghbV9tdXRh
YmxlU3R5bGUpCi0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNyZWF0ZSgpOworICAgICAgICBtX211dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlT
ZXQ6OmNyZWF0ZSgpOwogCiAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIHZhbHVlLCBpbXBvcnRhbnQpOwogfQpAQCAtNDY5LDcgKzQ4NCw3IEBAIGJvb2wgRWRpdGlu
Z1N0eWxlOjp0ZXh0RGlyZWN0aW9uKFdyaXRpbmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSkKK3ZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHN0eWxlKQogewogICAgIG1fbXV0YWJsZVN0eWxlID0gc3R5bGU7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBvciBu
b3QgZm9udCBpcyBmaXhlZCB3aWR0aCBmb3IgbXV0YWJsZSBzdHlsZS4KQEAgLTQ3OCwxMiArNDkz
LDEyIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPEMKICAgICBleHRy
YWN0Rm9udFNpemVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6b3ZlcnJpZGVXaXRo
U3R5bGUoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQordm9pZCBFZGl0
aW5nU3R5bGU6Om92ZXJyaWRlV2l0aFN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
KQogewogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCi0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICBtX211dGFibGVTdHls
ZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIG1fbXV0YWJsZVN0eWxlLT5tZXJn
ZShzdHlsZSk7CiAgICAgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKIH0KQEAgLTUyMCw3ICs1MzUs
NyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjplCiBQYXNzUmVmUHRy
PEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlVGV4dERpcmVjdGlv
bigpCiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdGV4dERpcmVjdGlvbiA9IEVkaXRpbmdT
dHlsZTo6Y3JlYXRlKCk7Ci0gICAgdGV4dERpcmVjdGlvbi0+bV9tdXRhYmxlU3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgdGV4dERpcmVjdGlvbi0+bV9t
dXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICB0ZXh0RGlyZWN0
aW9uLT5tX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwg
Q1NTVmFsdWVFbWJlZCwgbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQoQ1NTUHJv
cGVydHlVbmljb2RlQmlkaSkpOwogICAgIHRleHREaXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgbV9tdXRhYmxlU3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pLAogICAgICAgICBtX211dGFibGVTdHlsZS0+
cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwpAQCAtNTQzLDEwICs1
NTgsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZAogewogICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdT
dHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwg
QWxsRWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gbm9kZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRT
dHlsZShub2RlKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIG5vZGVTdHlsZS0+cmVtb3Zl
RXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0KCkpOwotICAgIG1fbXV0YWJsZVN0
eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhub2RlU3R5bGUuZ2V0KCkpOworICAgIFJl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21w
dXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwgQWxsRWRpdGluZ1By
b3BlcnRpZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBub2RlU3R5bGUgPSBlZGl0
aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpLCBBbGxFZGl0aW5n
UHJvcGVydGllcyk7CisgICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhw
YXJlbnRTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKTsKKyAgICBtX211dGFibGVT
dHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMobm9kZVN0eWxlLT5lbnN1cmVDU1NTdHls
ZURlY2xhcmF0aW9uKCkpOwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25m
bGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQpAQCAtNTU0LDkgKzU2OSw5IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW4KICAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBl
ZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5v
ZGUoKSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNv
bXB1dGVkU3R5bGUobm9kZSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAgICBub2RlU3R5bGUt
PnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgpKTsKKyAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0
ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSksIEFsbEVkaXRpbmdQcm9w
ZXJ0aWVzKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbm9kZVN0eWxlID0gZWRpdGlu
Z1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSwgQWxsRWRpdGluZ1By
b3BlcnRpZXMpOworICAgIG5vZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFy
ZW50U3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7CiAKICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNvdW50ID0gbm9kZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkKQEAgLTU5OCwxMiArNjEzLDEyIEBA
IFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEUKIHsKICAgICBpZiAoIXN0
eWxlIHx8ICFzdHlsZS0+bV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0
YXRlOwotICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdl
dCgpLCBEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CisgICAgcmV0dXJuIHRyaVN0YXRl
T2ZTdHlsZShzdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
KSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiBUcmlTdGF0ZSBFZGl0aW5n
U3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRvQ29tcGFy
ZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJv
cGVydGllcykgY29uc3QKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGRpZmZlcmVuY2UgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0
eWxlVG9Db21wYXJlKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZGlmZmVyZW5jZSA9
IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVUb0NvbXBhcmUp
OwogCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVUZXh0
T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJblNl
dCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0aWVz
KSk7CkBAIC02NDgsNyArNjYzLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJ
bmxpbmVTdAogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBBU1NFUlQoIWNvbmZsaWN0aW5nUHJv
cGVydGllcyB8fCBjb25mbGljdGluZ1Byb3BlcnRpZXMtPmlzRW1wdHkoKSk7CiAKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHls
ZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlu
bGluZVN0eWxlRGVjbCgpOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgIWlubGluZVN0eWxl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTgzNSw3ICs4NTAsNyBAQCBib29sIEVkaXRp
bmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9yCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVz
Kys7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRy
KSkgewotICAgICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gZWxl
bWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKKyAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZS0+cHJvcGVydHlDb3VudCgpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICAg
ICAgICAgIGlmICghaXNFZGl0aW5nUHJvcGVydHkoc3R5bGUtPnByb3BlcnR5QXQoaSkuaWQoKSkp
CkBAIC05MTQsNyArOTI5LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5bGVP
ZkVsZQogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlz
Tm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFsZW50KiBlcXVpdmFs
ZW50LCBjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVtZW50LAotICAgIEVkaXRpbmdTdHlsZTo6Q1NT
UHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQorICAgIEVkaXRpbmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGVxdWl2YWxlbnQtPm1hdGNoZXMo
ZWxlbWVudCkgJiYgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZShlbGVtZW50LT5p
bmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgJiYgKG1vZGUgPT0gRWRpdGluZ1N0eWxlOjpPdmVy
cmlkZVZhbHVlcyB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKHN0eWxlKSk7
CkBAIC05ODIsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVl
cyhDUwogICAgICAgICBtZXJnZWRWYWx1ZS0+YXBwZW5kKGxpbmVUaHJvdWdoLmdldCgpKTsKIH0K
IAotdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlKQordm9pZCBFZGl0aW5nU3R5
bGU6Om1lcmdlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5T3ZlcnJp
ZGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAx
MSwxNCArMTAyNiwxNCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShDU1NNdXRhYmxl
CiAgICAgfQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCB1bnNp
Z25lZCBydWxlc1RvSW5jbHVkZSkKK3N0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcnVs
ZXNUb0luY2x1ZGUpOwogICAgIGlmIChtYXRjaGVkUnVsZXMpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAg
ICAgaWYgKG1hdGNoZWRSdWxlcy0+aXRlbShpKS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JV
TEUpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHMgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihtYXRjaGVkUnVsZXMtPml0ZW0oaSkpLT5k
ZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4obWF0Y2hlZFJ1bGVzLT5pdGVtKGkpKS0+ZGVj
bGFyYXRpb24oKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+bWVyZ2Uocy5nZXQoKSwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMjksNyArMTA0NCw3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmEKIAogdm9pZCBFZGl0aW5nU3R5bGU6Om1l
cmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxl
RnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwKKyAgICBSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9y
RWxlbWVudChlbGVtZW50LAogICAgICAgICBDU1NTdHlsZVNlbGVjdG9yOjpBdXRob3JDU1NSdWxl
cyB8IENTU1N0eWxlU2VsZWN0b3I6OkNyb3NzT3JpZ2luQ1NTUnVsZXMpOwogICAgIC8vIFN0eWxl
cyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQgaW4gdGhlIHZhcmlhYmxl
ICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKICAgICAvLyBvdmVyIHRob3NlIGZyb20gbWF0Y2hl
ZCBydWxlcy4KQEAgLTEwNDgsNyArMTA2Myw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0
eWxlRnJvbVJ1bGVzRm8KICAgICAvLyBGb3IgZXhhbXBsZTogc3R5bGU9ImhlaWdodDogMSU7IG92
ZXJmbG93OiB2aXNpYmxlOyIgaW4gcXVpcmtzbW9kZQogICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUg
b3RoZXJzIGxpa2UgdGhpcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81MTk1MTIzPiBTbGFzaGRvdCBj
b3B5L3Bhc3RlIGZpZGVsaXR5IHByb2JsZW0KICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlRm9yRWxlbWVudCA9IGNvbXB1dGVkU3R5bGUoZWxlbWVu
dCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBmcm9tQ29tcHV0ZWRT
dHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gZnJvbUNvbXB1dGVkU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0Ojpj
cmVhdGUoKTsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBtX211dGFi
bGVTdHlsZS0+cHJvcGVydHlDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydHlDb3VudDsgKytpKSB7CkBAIC0xMDY1LDcgKzEwODAsNyBAQCB2b2lkIEVkaXRp
bmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvCiAgICAgbV9tdXRhYmxlU3R5bGUtPm1lcmdl
KGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVy
dGllc0luU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlVG9SZW1vdmVQcm9w
ZXJ0aWVzRnJvbSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorc3RhdGljIHZv
aWQgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVUb1JlbW92
ZVByb3BlcnRpZXNGcm9tLCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKIHsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGUtPnByb3BlcnR5Q291bnQoKTsKICAgICBWZWN0b3I8aW50
PiBwcm9wZXJ0aWVzVG9SZW1vdmUocHJvcGVydHlDb3VudCk7CkBAIC0xMDgyLDkgKzEwOTcsOSBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIDEuIFJlbW92ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVsZXMgYmVjYXVzZSBz
dHlsZSByZW1haW4gd2l0aG91dCByZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0eWxlIGRlY2xhcmF0
aW9uCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRj
aGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0
eWxlU2VsZWN0b3I6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JF
bGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwog
ICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+
aXNFbXB0eSgpKQotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbiht
X211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKKyAgICAg
ICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0
KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKTsK
IAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQgYW5kIG5vdCBvdmVy
cmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb21wdXRl
ZFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoY29udGV4dCwgRWRpdGluZ1Byb3BlcnRpZXNJ
bkVmZmVjdCk7CkBAIC0xMDkzLDcgKzExMDgsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3Zl
U3R5bGVGcm9tUnVsZXNBCiAgICAgICAgICAgICBjb21wdXRlZFN0eWxlLT5tX211dGFibGVTdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENTU1ZhbHVlVHJhbnNw
YXJlbnQpOwogCiAgICAgICAgIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKGNvbXB1dGVkU3R5bGUt
Pm1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZUZyb21NYXRjaGVkUnVsZXMuZ2V0KCkpOwotICAg
ICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5n
ZXQoKSwgY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgICAgICBtX211
dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgY29t
cHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7
CiAgICAgfQogCiAgICAgLy8gMy4gSWYgdGhpcyBlbGVtZW50IGlzIGEgc3BhbiBhbmQgaGFzIGRp
c3BsYXk6IGlubGluZSBvciBmbG9hdDogbm9uZSwgcmVtb3ZlIHRoZW0gdW5sZXNzIHRoZXkgYXJl
IG92ZXJyaWRlbiBieSBydWxlcy4KQEAgLTExMTEsNyArMTEyNiw3IEBAIHZvaWQgRWRpdGluZ1N0
eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGUKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlIHx8IG1f
bXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gc3R5bGVGcm9tTWF0Y2hl
ZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBDU1NTdHlsZVNlbGVjdG9yOjpVQUFuZFVzZXJDU1NS
dWxlcyk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGRlZmF1bHRTdHlsZSA9IHN0eWxl
RnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6VUFB
bmRVc2VyQ1NTUnVsZXMpOwogCiAgICAgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUobV9tdXRhYmxl
U3R5bGUuZ2V0KCksIGRlZmF1bHRTdHlsZS5nZXQoKSk7CiB9CkBAIC0xMTE5LDcgKzExMzQsNyBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlCiB2b2lkIEVkaXRpbmdT
dHlsZTo6Zm9yY2VJbmxpbmUoKQogewogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCi0gICAgICAg
IG1fbXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwor
ICAgICAgICBtX211dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAg
IGNvbnN0IGJvb2wgcHJvcGVydHlJc0ltcG9ydGFudCA9IHRydWU7CiAgICAgbV9tdXRhYmxlU3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVJbmxpbmUsIHByb3Bl
cnR5SXNJbXBvcnRhbnQpOwogfQpAQCAtMTE2OCw3ICsxMTgzLDcgQEAgUGFzc1JlZlB0cjxFZGl0
aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6cwogICAgIHJldHVybiBzdHlsZTsKIH0KIAotc3RhdGlj
IHZvaWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSkKK3N0YXRpYyB2b2lkIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKIHsgICAgCiAgICAgUmVmUHRyPENTU1Zh
bHVlPiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKQEAgLTExOTksNyArMTIxNCw3IEBAIFN0eWxlQ2hhbmdl
OjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBwb3NpdGlvbi5jb21wdXRlZFN0eWxlKCk7
CiAgICAgLy8gRklYTUU6IHRha2UgY2FyZSBvZiBiYWNrZ3JvdW5kLWNvbG9yIGluIGVmZmVjdAot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbXV0YWJsZVN0eWxlID0gZ2V0
UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlLmdldCgpKTsKKyAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05v
dEluKHN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlLmdldCgpKTsKIAogICAgIHJlY29uY2ls
ZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwogICAgIGlmICgh
ZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRTdHlsZVdpdGhDU1MoKSkKQEAgLTEy
MTgsNyArMTIzMyw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMK
ICAgICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29y
YXRpb24sIGludCBwcm9wZXJ0eUlEKQorc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9w
ZXJ0eShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBuZXdUZXh0
RGVjb3JhdGlvbiwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9u
LT5sZW5ndGgoKSkKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1Rl
eHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3Bl
cnR5SUQpKTsKQEAgLTEyMjksNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIHNldFRleHREZWNvcmF0
aW9uUHJvcGVydHkoQ1MKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0
U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKQordm9pZCBTdHlsZUNoYW5n
ZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkKIHsKICAgICBBU1NF
UlQoc3R5bGUpOwogCkBAIC0xMjkyLDcgKzEzMDcsNyBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRy
YWN0VGV4dFN0eWxlcyhEb2N1CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWZmVGV4dERlY29y
YXRpb25zKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnRJRCwg
Q1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0
aW9ucyhTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgaW50IHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJl
ZlRleHREZWNvcmF0aW9uKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24g
PSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOwogICAgIGlmICghdGV4dERl
Y29yYXRpb24gfHwgIXRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpIHx8ICFyZWZUZXh0RGVj
b3JhdGlvbiB8fCAhcmVmVGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCkBAIC0xMzA3LDEx
ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhDU1NNdXRhYgogICAg
IHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoc3R5bGUsIG5ld1RleHREZWNvcmF0aW9uLmdldCgp
LCBwcm9wZXJ0SUQpOwogfQogCi1zdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKQorc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NWYWx1
ZSogZm9udFdlaWdodCkKIHsKLSAgICBBU1NFUlQoc3R5bGUpOwotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gZm9udFdlaWdodCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJv
cGVydHlGb250V2VpZ2h0KTsKLQogICAgIGlmICghZm9udFdlaWdodCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghZm9udFdlaWdodC0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAtMTMx
OSw3ICsxMzMxLDcgQEAgc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NTdHlsZURlYwog
CiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJlIGFyZSBvbmx5
IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCiAgICAgLy8gQ29s
bGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3byBzdGF0ZXMg
Zm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGZvbnRXZWlnaHQuZ2V0KCkpLT5nZXRJZGVudCgpKSB7CisgICAgc3dpdGNoIChz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZvbnRXZWlnaHQpLT5nZXRJZGVudCgpKSB7
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUyMDA6CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWUzMDA6CkBAIC0xMzM2LDEzICsxMzQ4LDI2IEBAIHN0YXRpYyBi
b29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWMKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gRm9yIENTU1ZhbHVlQm9sZGVyIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIKLSAg
ICByZXR1cm4gZmFsc2U7IC8vIE1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBpbnQgZ2V0VGV4dEFsaWdubWVudChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCit7CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRX
ZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5Rm9u
dFdlaWdodCk7CisgICAgcmV0dXJuIGZvbnRXZWlnaHRJc0JvbGQoZm9udFdlaWdodC5nZXQoKSk7
Cit9CisKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoU3R5bGVQcm9wZXJ0eVNldCogc3R5
bGUpCiB7Ci0gICAgaW50IHRleHRBbGlnbiA9IGdldElkZW50aWZpZXJWYWx1ZShzdHlsZSwgQ1NT
UHJvcGVydHlUZXh0QWxpZ24pOwotICAgIHN3aXRjaCAodGV4dEFsaWduKSB7CisgICAgQVNTRVJU
KHN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgIHJldHVybiBmb250V2Vp
Z2h0SXNCb2xkKGZvbnRXZWlnaHQuZ2V0KCkpOworfQorCitzdGF0aWMgaW50IGdldFRleHRBbGln
bm1lbnQoaW50IHRleHRBbGlnbklkZW50aWZpZXJWYWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHRleHRB
bGlnbklkZW50aWZpZXJWYWx1ZSkgewogICAgIGNhc2UgQ1NTVmFsdWVDZW50ZXI6CiAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdENlbnRlcjoKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2VudGVyOwpA
QCAtMTM1OCwxMSArMTM4MywyMSBAQCBzdGF0aWMgaW50IGdldFRleHRBbGlnbm1lbnQoQ1NTU3R5
bGVEZWNsCiAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxpZDsKIH0KIAotUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0aWVzTm90SW4oQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFz
ZVN0eWxlKQorc3RhdGljIGludCBnZXRUZXh0QWxpZ25tZW50KENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKQoreworICAgIHJldHVybiBnZXRUZXh0QWxpZ25tZW50KGdldElkZW50aWZpZXJWYWx1
ZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pKTsKK30KKworc3RhdGljIGludCBnZXRUZXh0
QWxpZ25tZW50KFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQoreworICAgIHJldHVybiBnZXRUZXh0
QWxpZ25tZW50KGdldElkZW50aWZpZXJWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24p
KTsKK30KKworUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBnZXRQcm9wZXJ0aWVzTm90SW4o
U3R5bGVQcm9wZXJ0eVNldCogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogYmFzZVN0eWxlKQogewogICAgIEFTU0VSVChzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzKTsKICAgICBBU1NFUlQoYmFzZVN0eWxlKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHJlc3VsdCA9IHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMt
PmNvcHkoKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcmVzdWx0ID0gc3R5bGVXaXRo
UmVkdW5kYW50UHJvcGVydGllcy0+Y29weSgpOwogCiAgICAgcmVzdWx0LT5yZW1vdmVFcXVpdmFs
ZW50UHJvcGVydGllcyhiYXNlU3R5bGUpOwogCkBAIC0xMzgyLDE1ICsxNDE3LDIzIEBAIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHIKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1pbnQgZ2V0SWRlbnRpZmllclZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitpbnQgZ2V0SWRlbnRpZmllclZhbHVlKFN0eWxlUHJv
cGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRlbnQo
KTsKK30KIAoraW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIGlmICghc3R5bGUpCisgICAgICAg
IHJldHVybiAwOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SUQpOwogICAgIGlmICghdmFsdWUgfHwgIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybiAwOwotCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5nZXRJZGVudCgpOwog
fQogCkBAIC0xNDE4LDIyICsxNDYxLDMwIEBAIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1
ZShEb2N1bWVudCoKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tn
cm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK2Jvb2wgaXNUcmFuc3BhcmVu
dENvbG9yVmFsdWUoQ1NTVmFsdWUqIGNzc1ZhbHVlKQogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoIWNzc1ZhbHVlKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIGlmICghY3NzVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3NzVmFsdWUu
Z2V0KCkpOwotICAgIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3NzVmFsdWUpOyAgICAKICAgICBpZiAodmFsdWUtPmlzUkdC
Q29sb3IoKSkKLSAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUtPmdldFJHQkEzMlZh
bHVlKCkpOwotICAgIAorICAgICAgICByZXR1cm4gIWFscGhhQ2hhbm5lbCh2YWx1ZS0+Z2V0UkdC
QTMyVmFsdWUoKSk7ICAgIAogICAgIHJldHVybiB2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZVRyYW5zcGFyZW50OwogfQogCitib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKTsKKyAgICByZXR1cm4gaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoY3NzVmFsdWUu
Z2V0KCkpOworfQorICAgIAorYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwor
ICAgIHJldHVybiBpc1RyYW5zcGFyZW50Q29sb3JWYWx1ZShjc3NWYWx1ZS5nZXQoKSk7Cit9CisK
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGJhY2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUqIG5vZGUp
CiB7CiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNs
YXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsK
QEAgLTUzLDYgKzUyLDcgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgUXVh
bGlmaWVkTmFtZTsKIGNsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsK
IGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCkBAIC04MSw2
ICs4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0
eWxlKHBvc2l0aW9uLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKSk7CiAgICAgfQogCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
c3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShz
dHlsZSkpOworICAgIH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3Jl
YXRlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUoc3R5bGUpKTsKQEAgLTkzLDExICs5OCwxMSBA
QCBwdWJsaWM6CiAKICAgICB+RWRpdGluZ1N0eWxlKCk7CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBtX211dGFibGVTdHlsZS5nZXQoKTsgfQorICAg
IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKCkgeyByZXR1cm4gbV9tdXRhYmxlU3R5bGUuZ2V0KCk7
IH0KICAgICBib29sIHRleHREaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiYpIGNvbnN0OwogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pOwotICAgIHZvaWQgb3ZlcnJpZGVXaXRoU3R5bGUoY29u
c3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHNldFN0eWxlKFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOworICAgIHZvaWQgb3ZlcnJpZGVXaXRoU3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCopOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBQYXNzUmVmUHRy
PEVkaXRpbmdTdHlsZT4gY29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxl
PiBleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0xNDQsNiArMTQ5LDcgQEAg
cHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoKTsKICAgICBFZGl0aW5nU3R5bGUoTm9kZSosIFBy
b3BlcnRpZXNUb0luY2x1ZGUpOwogICAgIEVkaXRpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYsIFBy
b3BlcnRpZXNUb0luY2x1ZGUpOworICAgIEVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5
U2V0Kik7CiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAg
ICBFZGl0aW5nU3R5bGUoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAg
IHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CkBAIC0xNTQsOSArMTYwLDkg
QEAgcHJpdmF0ZToKICAgICBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29u
c3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxl
bWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlE
PiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5k
SW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlk
ZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgbWVyZ2VTdHlsZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlKTsKKyAgICB2b2lk
IG1lcmdlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlKTsK
IAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9tdXRhYmxlU3R5bGU7
CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fbXV0YWJsZVN0eWxlOwogICAgIGJvb2wg
bV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKICAgICBmbG9hdCBtX2ZvbnRTaXplRGVs
dGE7CiAKQEAgLTIwMSw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMo
RG9jdW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgc2hvdWxkVXNlRml4
ZWRGb250RGVmYXVsdFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQq
LCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7
CiAKICAgICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBib29sIG1fYXBwbHlCb2xkOwpAQCAtMjE3
LDYgKzIyMyw3IEBAIHByaXZhdGU6CiAKIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25z
IG9yIG1ha2UgdGhlbSBub24tZ2xvYmFsIHRvIGRpc2NvdXJhZ2UgdXNpbmcgQ1NTU3R5bGVEZWNs
YXJhdGlvbiBkaXJlY3RseS4KIGludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIENTU1Byb3BlcnR5SUQpOworaW50IGdldElkZW50aWZpZXJWYWx1ZShTdHlsZVByb3Bl
cnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ2
LDkgKzEzNDYsOSBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgZGlyZWN0
aW9uID09IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA/ICJsdHIiIDogZGlyZWN0aW9uID09
IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbiA/ICJydGwiIDogImluaGVyaXQiLCBmYWxzZSk7
Ci0gICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLmdldCgpLCBFZGl0QWN0
aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CisgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0
aW9uKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIEVkaXRBY3Rpb25TZXRXcml0
aW5nRGlyZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKQEAg
LTI3NDUsNyArMjc0NSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVu
dCgKICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwogICAgIGlmICghZWxl
bWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxl
bWVudCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5lbnN1cmVJbmxpbmVT
dHlsZURlY2woKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwg
ImJyZWFrLXdvcmQiLCBmYWxzZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNlKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24g
MTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsMTYgKzk4LDE2IEBAIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWUo
RnJhbWUqIGZyYW1lLCAKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKIH0K
IAotc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShGcmFtZSogZnJhbWUsIEVkaXRvckNv
bW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQorc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShGcmFtZSog
ZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hv
dWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVh
c29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21tYW5kRnJv
bU1lbnVPcktleUJpbmRpbmc6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZVRv
U2VsZWN0aW9uKHN0eWxlLCBhY3Rpb24pOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBhY3Rp
b24pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NOgogICAg
IGNhc2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZToKLSAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKHN0eWxlKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5hcHBs
eVN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTYsMTQgKzEx
NiwxNCBAQCBzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lKiBmCiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7
CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwogICAg
IHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUu
Z2V0KCkpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFtZSogZnJhbWUs
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3Bl
cnR5SUQsIGludCBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6
Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFs
dWUpOwogICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlv
biwgc3R5bGUuZ2V0KCkpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVUb2dnbGVTdHlsZUluTGlzdChGcmEKICAgICAgICAgbmV3U3R5bGUgPSB2YWx1ZS0+Y3NzVGV4
dCgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBoYXZpbmcgdG8gY29udmVydCBu
ZXcgc3R5bGUgaW50byB0ZXh0LiAgV2Ugc2hvdWxkIGhhdmUgc2V0UHJvcGVydHlDU1NWYWx1ZS4K
LSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld011dGFibGVTdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gbmV3TXV0YWJsZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7
CiAgICAgbmV3TXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdTdHlsZSwg
ZWMpOwogICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlv
biwgbmV3TXV0YWJsZVN0eWxlLmdldCgpKTsKIH0KQEAgLTE3NCwxNiArMTc0LDE2IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZShGcmFtZSogZnIKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5VmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CiAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMg
RE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNl
KSB7CiAgICAgY2FzZSBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmc6Ci0gICAgICAgIGZyYW1l
LT5lZGl0b3IoKS0+YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLmdldCgpLCBh
Y3Rpb24pOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5UGFyYWdyYXBoU3R5bGVUb1Nl
bGVjdGlvbihzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBhY3Rpb24pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NOgogICAgIGNhc2UgQ29t
bWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZToKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5h
cHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5hcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC01ODAsMjcgKzU4MCwyNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSnVzdGlmeVJpZ2h0KEZy
YW1lKiBmCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVtYmVkKTsK
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRy
KTsKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rp
b25TZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUo
c3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgRWRpdEFjdGlvblNldFdyaXRpbmdE
aXJlY3Rpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTWFr
ZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlT
ZXQ6OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVC
aWRpLCBDU1NWYWx1ZU5vcm1hbCk7Ci0gICAgZnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKHN0
eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CisgICAgZnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIEVk
aXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3Rh
dGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1iZWQpOwogICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwpOwotICAgIGZyYW1l
LT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgRWRpdEFjdGlvblNldFdyaXRpbmdE
aXJlY3Rpb24pOworICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS0+ZW5zdXJl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNyw3ICsxODM3LDcgQEAg
dm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldAogI2VuZGlmCiB9CiAKLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEZyYW1lU2VsZWN0aW9uOjpjb3B5
VHlwaW5nU3R5bGUoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBGcmFtZVNl
bGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fdHlwaW5nU3R5
bGUgfHwgIW1fdHlwaW5nU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTA2NjYwKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMyArMzgsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2hhcmFj
dGVyRGF0YTsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRnJhbWU7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBT
dHlsZVByb3BlcnR5U2V0OwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBlbnVtIEVVc2VyVHJp
Z2dlcmVkIHsgTm90VXNlclRyaWdnZXJlZCA9IDAsIFVzZXJUcmlnZ2VyZWQgPSAxIH07CkBAIC0y
MzUsNyArMjM1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkg
Y29uc3Q7CiAKICAgICBFZGl0aW5nU3R5bGUqIHR5cGluZ1N0eWxlKCkgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVR5cGluZ1N0eWxlKCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5VHlwaW5nU3R5bGUoKSBj
b25zdDsKICAgICB2b2lkIHNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPik7
CiAgICAgdm9pZCBjbGVhclR5cGluZ1N0eWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEw
NjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQ6OlJlbW92ZUNTU1Byb3BlCiAKIHZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpk
b0FwcGx5KCkKIHsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBtX2Vs
ZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0g
bV9lbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0eSk7CiAgICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJv
cGVydHlJc0ltcG9ydGFudChtX3Byb3BlcnR5KTsKICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
bV9wcm9wZXJ0eSk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21t
YW5kOjpkb0FwcGx5KCkKIAogdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRvVW5hcHBs
eSgpCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gbV9lbGVtZW50
LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IG1fZWxl
bWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KG1fcHJvcGVy
dHksIG1fb2xkVmFsdWUsIG1faW1wb3J0YW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEw
NjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogCiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZS5nZXQoKSk7CiAKLSAgICAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5
bGVEZWNsKCk7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVu
dC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5ld0lu
bGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5saW5lU3R5bGUpOwogICAgICAgICBp
ZiAoaW5saW5lU3R5bGUpIHsKICAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRleHQgPSBl
bGVtZW50LT5wYXJlbnROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIEVk
aXRpbmdTdHlsZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZXBsYWNlbWVudEZyYWdtZW50OworY2xh
c3MgU3R5bGVQcm9wZXJ0eVNldDsKIAogY2xhc3MgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQgOiBw
dWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGJvb2wgcHJv
cGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGlu
dCBwcm9wZXJ0eUlEKTsKK3N0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUo
U3R5bGVQcm9wZXJ0eVNldCosIGludCBwcm9wZXJ0eUlEKTsKIAogY2xhc3MgQXR0cmlidXRlQ2hh
bmdlIHsKIHB1YmxpYzoKQEAgLTEyOSwxMSArMTI5LDExIEBAIHB1YmxpYzoKICAgICBOb2RlKiBz
ZXJpYWxpemVOb2RlcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwogICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RyaW5nKHMpOyB9CiAgICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSos
IGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05v
ZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxz
ZSk7CisgICAgdm9pZCB3cmFwV2l0aFN0eWxlTm9kZShTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1l
bnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgU3RyaW5nIHRha2VSZXN1bHRzKCk7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXIm
LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIERvY3VtZW50KiwgYm9vbCBpc0Jsb2NrID0g
ZmFsc2UpOworICAgIHZvaWQgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwg
U3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50KiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwogICAg
IGNvbnN0IFN0cmluZyBzdHlsZU5vZGVDbG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7CiAg
ICAgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKQEAgLTE3
OCw3ICsxNzgsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vCiAg
ICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWlsZGVyIG9w
ZW5UYWc7CiAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1l
bnQsIGlzQmxvY2spOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OndyYXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNC
bG9jaykpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0
LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxv
Y2spCiB7CiAgICAgLy8gd3JhcHBpbmdTdHlsZUZvclNlcmlhbGl6YXRpb24gc2hvdWxkIGhhdmUg
cmVtb3ZlZCAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0CiAgICAgQVNTRVJUKHBy
b3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb25zSW5FZmZlY3QpKTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBzdGF0aWMgaW5saW5lIE5v
ZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1CiAgICAgcmV0dXJuIGFuY2VzdG9yVG9SZXRhaW5TdHJ1
Y3R1cmVBbmRBcHBlYXJhbmNlRm9yQmxvY2soY29tbW9uQW5jZXN0b3JCbG9jayk7CiB9CiAKLXN0
YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBpbnQgcHJvcGVydHlJRCkKK3N0YXRpYyBib29sIHByb3BlcnR5TWlz
c2luZ09yRXF1YWxUb05vbmUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIGludCBwcm9wZXJ0eUlE
KQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXQKICAgICAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkKK1Bh
c3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUo
KTsKICAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCShyZXZpc2lvbiAxMDY2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKSBPVkVSUklERTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHQKICAgICAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKQorUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGUoKQogewogICAgIGlmICghaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSkK
ICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNv
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNv
bEVsZW1lbnQuaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVDb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQXR0cmli
dXRlU3R5bGUoKSBPVkVSUklERTsKIAogICAgIGludCBtX3NwYW47CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDUsOSArNDQ1LDkgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YgogICAgIH0KIH0KIAotc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBsZWFrQm9y
ZGVyU3R5bGUoaW50IHZhbHVlKQorc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIGxlYWtCb3JkZXJT
dHlsZShpbnQgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsK
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwgdmFsdWUp
OwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLCB2
YWx1ZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxl
LCB2YWx1ZSk7CkBAIC00NTUsMTYgKzQ1NSwxNiBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIGxlYWtCCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKS5sZWFrUmVmKCk7CiB9
CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEhUTUxUYWJsZUVsZW1l
bnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpCiB7CiAgICAg
aWYgKCghbV9ib3JkZXJBdHRyICYmICFtX2JvcmRlckNvbG9yQXR0cikgfHwgbV9mcmFtZUF0dHIp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKG1fYm9yZGVyQ29sb3JBdHRyKSB7Ci0gICAg
ICAgIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc29saWRCb3JkZXJTdHlsZSA9
IGxlYWtCb3JkZXJTdHlsZShDU1NWYWx1ZVNvbGlkKTsKKyAgICAgICAgc3RhdGljIFN0eWxlUHJv
cGVydHlTZXQqIHNvbGlkQm9yZGVyU3R5bGUgPSBsZWFrQm9yZGVyU3R5bGUoQ1NTVmFsdWVTb2xp
ZCk7CiAgICAgICAgIHJldHVybiBzb2xpZEJvcmRlclN0eWxlOwogICAgIH0KLSAgICBzdGF0aWMg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIG91dHNldEJvcmRlclN0eWxlID0gbGVha0JvcmRl
clN0eWxlKENTU1ZhbHVlT3V0c2V0KTsKKyAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogb3V0
c2V0Qm9yZGVyU3R5bGUgPSBsZWFrQm9yZGVyU3R5bGUoQ1NTVmFsdWVPdXRzZXQpOwogICAgIHJl
dHVybiBvdXRzZXRCb3JkZXJTdHlsZTsKIH0KIApAQCAtNDkxLDkgKzQ5MSw5IEBAIEhUTUxUYWJs
ZUVsZW1lbnQ6OkNlbGxCb3JkZXJzIEhUTUxUYWJsZUUKICAgICByZXR1cm4gTm9Cb3JkZXJzOwog
fQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBIVE1MVGFibGVFbGVt
ZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQogewotICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAKICAgICBzd2l0Y2ggKGNlbGxCb3JkZXJzKCkp
IHsKICAgICBjYXNlIFNvbGlkQm9yZGVyc0NvbHNPbmx5OgpAQCAtNTQyLDE2ICs1NDIsMTYgQEAg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gSAogICAgIHJldHVybiBzdHls
ZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxDZWxsU3R5bGUoKQorUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlvbmFsQ2VsbFN0eWxlKCkKIHsK
ICAgICBpZiAoIW1fc2hhcmVkQ2VsbFN0eWxlKQogICAgICAgICBtX3NoYXJlZENlbGxTdHlsZSA9
IGNyZWF0ZVNoYXJlZENlbGxTdHlsZSgpOwogICAgIHJldHVybiBtX3NoYXJlZENlbGxTdHlsZTsK
IH0KIAotc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBsZWFrR3JvdXBCb3JkZXJT
dHlsZShpbnQgcm93cykKK3N0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiBsZWFrR3JvdXBCb3JkZXJT
dHlsZShpbnQgcm93cykKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwog
ICAgIGlmIChyb3dzKSB7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJv
cmRlclRvcFdpZHRoLCBDU1NWYWx1ZVRoaW4pOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQ1NTVmFsdWVUaGluKTsKQEAgLTU2NiwxNiAr
NTY2LDE2IEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVha0cKICAgICBy
ZXR1cm4gc3R5bGUucmVsZWFzZSgpLmxlYWtSZWYoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEdyb3VwU3R5
bGUoYm9vbCByb3dzKQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVFbGVt
ZW50OjphZGRpdGlvbmFsR3JvdXBTdHlsZShib29sIHJvd3MpCiB7CiAgICAgaWYgKG1fcnVsZXNB
dHRyICE9IEdyb3Vwc1J1bGVzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChyb3dzKSB7
Ci0gICAgICAgIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcm93Qm9yZGVyU3R5
bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGljIFN0eWxlUHJv
cGVydHlTZXQqIHJvd0JvcmRlclN0eWxlID0gbGVha0dyb3VwQm9yZGVyU3R5bGUodHJ1ZSk7CiAg
ICAgICAgIHJldHVybiByb3dCb3JkZXJTdHlsZTsKICAgICB9Ci0gICAgc3RhdGljIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBjb2x1bW5Cb3JkZXJTdHlsZSA9IGxlYWtHcm91cEJvcmRlclN0
eWxlKGZhbHNlKTsKKyAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogY29sdW1uQm9yZGVyU3R5
bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZShmYWxzZSk7CiAgICAgcmV0dXJuIGNvbHVtbkJvcmRl
clN0eWxlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAko
cmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gYWRkaXRpb25hbENlbGxTdHlsZSgpOwotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cyk7CisgICAgUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQ2VsbFN0eWxlKCk7CisgICAgUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsR3JvdXBTdHlsZShib29sIHJvd3Mp
OwogCiBwcml2YXRlOgogICAgIEhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCiAgICAgLy8gVXNlZCB0byBvYnRh
aW4gZWl0aGVyIGEgc29saWQgb3Igb3V0c2V0IGJvcmRlciBkZWNsIGFuZCB0byBkZWFsIHdpdGgg
dGhlIGZyYW1lIGFuZCBydWxlcyBhdHRyaWJ1dGVzLgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCkBAIC04Niw3
ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBDZWxsQm9yZGVycyBjZWxsQm9yZGVycygpIGNvbnN0
OwogCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlU2hh
cmVkQ2VsbFN0eWxlKCk7CisgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGVT
aGFyZWRDZWxsU3R5bGUoKTsKIAogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBsYXN0Qm9k
eSgpIGNvbnN0OwogCkBAIC05OCw3ICs5OCw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBz
aG9ydCBtX3BhZGRpbmc7CiAgICAgT3duUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBtX3Jv
d3NDb2xsZWN0aW9uOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9z
aGFyZWRDZWxsU3R5bGU7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fc2hhcmVkQ2Vs
bFN0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFBhc3NSZWZQdHI8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+
IEhUTUwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUo
KQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkKIHsKICAgICBDb250YWluZXJOb2RlKiBwID0gcGFy
ZW50Tm9kZSgpOwogICAgIHdoaWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHJl
dmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGUoKSBPVkVSUklERTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDcgKzExOSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEJ1YmJsZVBvc2l0aW9uKGNvbnN0IEwKICAg
ICAgICAgaG9zdFkgLT0gY29udGFpbmVyTG9jYXRpb24ueSgpICsgY29udGFpbmVyLT5ib3JkZXJU
b3AoKTsKICAgICB9CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBi
dWJibGUtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlID0gYnViYmxlLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlUb3AsIGhvc3RZICsgaG9zdFJlY3QuaGVpZ2h0KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgIC8vIFRoZSAnbGVmdCcgdmFsdWUgb2YgOjotd2Via2l0
LXZhbGlkYXRpb24tYnViYmxlLWFycm93LgogICAgIGNvbnN0IGludCBidWJibGVBcnJvd1RvcE9m
ZnNldCA9IDMyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTg5LDcgKzE5ODksNyBAQCBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpmb250KCkgCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250
KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHRlbXBEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbCA9IFN0eWxlUHJvcGVydHlT
ZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBwYXJzZXIoIW1fdXNlc0NTU0NvbXBhdGliaWxp
dHlQYXJzZU1vZGUpOwogCiAgICAgU3RyaW5nIGRlY2xhcmF0aW9uVGV4dCgiZm9udDogIik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUs
NyBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCiAKIHZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYgcG9z
aXRpb24pCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBlbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKIAogICAgIGRvdWJsZSBsZWZ0ID0gcG9zaXRpb24ueCgpOwogICAg
IGRvdWJsZSB0b3AgPSBwb3NpdGlvbi55KCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aQogCiB2b2lkIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudDo6cmVzZXRQb3NpdGlvbigpCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNl
dCogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKIAogICAgIHN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOwogICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRvcCk7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVs
ZW1lbnQ6Om1ha2VPcGFxdQogCiAgICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQoKS0+cGFn
ZSgpID8gZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVy
YXRpb24oKSA6IDA7CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBl
bnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVu
c3VyZUlubGluZVN0eWxlRGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0
aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eU9wYWNpdHksIDEuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwpA
QCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJh
bnMKICAgICBpZiAoIW1fb3BhcXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICBT
dHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwogICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NT
UHJvcGVydHlPcGFjaXR5KTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uRHVyYXRpb24sIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFD
b250cm9sc0ZhZGVPdXREdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwogICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDAuMCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzQsNyArMzM0LDcgQEAgUGFzc1JlZlB0cjxUcmFja0xpbWl0ZXJFbGVtZW50PiBUcmFj
a0xpbQogewogICAgIFJlZlB0cjxUcmFja0xpbWl0ZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRS
ZWYobmV3IFRyYWNrTGltaXRlckVsZW1lbnQoZG9jdW1lbnQpKTsKIAotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgp
OworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwg
Q1NTVmFsdWVIaWRkZW4pOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzI3LDcgKzcyNyw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckNTU0EK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBh
dHRyU3R5bGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBTdHJp
bmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvckNTU0lkKCksIGF0dHJpYnV0ZS0+ZGVjbCgpLCAwKTsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUo
SW5zcGVjdG9yQ1NTSWQoKSwgYXR0cmlidXRlLT5kZWNsKCktPmVuc3VyZUNTU1N0eWxlRGVjbGFy
YXRpb24oKSwgMCk7CiAgICAgICAgIGF0dHJTdHlsZU9iamVjdC0+c2V0U3RyaW5nKCJuYW1lIiwg
YXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgYXR0clN0eWxlT2JqZWN0LT5z
ZXRPYmplY3QoInN0eWxlIiwgaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSk7
CiAgICAgICAgIGF0dHJTdHlsZXMtPnB1c2hPYmplY3QoYXR0clN0eWxlT2JqZWN0LnJlbGVhc2Uo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQsNyBA
QCBib29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQoRXJyCiAgICAgcG9wdWxhdGVB
bGxQcm9wZXJ0aWVzKCZhbGxQcm9wZXJ0aWVzKTsKIAogICAgIGlmIChwcm9wZXJ0eVRleHQuc3Ry
aXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiB0ZW1wTXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcE11dGFi
bGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q1NT
U3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUo
KTsKICAgICAgICAgQ1NTUGFyc2VyIHA7CiAgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1w
TXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFt
ZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpKTsK
QEAgLTEzMTcsNyArMTMxNyw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBEZWNs
YXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBwOwog
ICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0
LCByZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDcsMTIgKzQ0NywxMiBAQCBib29sIERyYWdDb250cm9sbGVy
Ojpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGlubmVyUmFuZ2Ug
PSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxpemVkKCksIGZhbHNlKTsKLSAg
ICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS5n
ZXQoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCisgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9y
KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwg
aW5uZXJSYW5nZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1f
Y2xpZW50LT53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLT5hcHBs
eVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0Q29sb3IpOworICAgICAgICBpbm5lckZy
YW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bigpLCBFZGl0QWN0aW9uU2V0Q29sb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxMDY2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVz
b3VyY2VzRm8KICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPmRl
Y2xhcmF0aW9uKCksIGRvY3VtZW50KTsKIH0KIAotdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGVEZWNsYXJhdGlvbiwgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBz
dHlsZURlY2xhcmF0aW9uLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzdHlsZURl
Y2xhcmF0aW9uKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIAogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRv
IHNlcmlhbGl6ZSBhIHBhZ2UgY29udGVudHMgYmFjayB0byB0ZXh0ICh0eXBpY2FsbHkgSFRNTCku
CiAvLyBJdCBzZXJpYWxpemVzIGFsbCB0aGUgcGFnZSBmcmFtZXMgYW5kIHJldHJpZXZlcyByZXNv
dXJjZXMgc3VjaCBhcyBpbWFnZXMgYW5kIENTUyBzdHlsZXNoZWV0cy4KQEAgLTc4LDcgKzc4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVl
dCosIGNvbnN0IEtVUkwmKTsKIAogICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJ
bWFnZSosIFJlbmRlck9iamVjdCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBEb2N1
bWVudCopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihTdHls
ZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsKICAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9y
Q1NTUnVsZShDU1NTdHlsZVJ1bGUqLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPFJlc291cmNl
PiogbV9yZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDcsNyArMTcwNyw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICBMYXlvdXRTaXplIGRpZmZlcmVu
Y2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5k
ZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKIAogICAgIEFTU0VSVChlbGVtZW50LT5p
c1N0eWxlZEVsZW1lbnQoKSk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
RGVjbGFyYXRpb24gPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRp
b24gPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3VyZUlubGluZVN0
eWxlRGVjbCgpOwogICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+c3R5bGUo
KS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWDsKIAogICAgIGlmIChyZXNpemUgIT0gUkVTSVpF
X1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBs
ZVN0eWxlUwogICAgIGlmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wg
PSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVT
dHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKICAgICByZXR1cm4gKCFpbmxpbmVT
dHlsZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2NjYwKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZHRm9udEZh
Y2VFbAogICAgICwgbV9mb250RmFjZVJ1bGUoQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUoKSkKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb250X2ZhY2VUYWcpKTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKG1fZm9udEZhY2VSdWxlLmdldCgpKTsKKyAgICBSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gc3R5bGVEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZShtX2ZvbnRGYWNlUnVsZS5nZXQoKSk7CiAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0U3RyaWN0
UGFyc2luZyh0cnVlKTsKICAgICBtX2ZvbnRGYWNlUnVsZS0+c2V0RGVjbGFyYXRpb24oc3R5bGVE
ZWNsYXJhdGlvbi5yZWxlYXNlKCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MTA2NjYyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Nzc0MAorICAgICAgICBJbnRlcm5hbCBwcm9wZXJ0eSBzZXQgdHlwZSBzaG91bGQgbm90IGJlIENT
U1N0eWxlRGVjbGFyYXRpb24KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF90
eXBpbmdTdHlsZV0pOgorCiAyMDEyLTAyLTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViS2l0L21hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDQ0MjY2
Mz4gUGFnaW5hdGVkIGRpc3BsYXkgZG9lcyBub3QgcmVzcGVjdCBwYWdlLWJyZWFrLXtiZWZvcmUs
YWZ0ZXJ9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9u
IDEwNjY2MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNo
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTc5MSw3
ICs3OTEsNyBAQCAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5cGluZ1N0eWxlCiB7CiAg
ICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdHlwaW5nU3R5bGUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Y29weVR5cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IHR5cGluZ1N0eWxlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCktPmNvcHlUeXBpbmdTdHlsZSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7
CiAgICAgaWYgKCF0eXBpbmdTdHlsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4g
a2l0KHR5cGluZ1N0eWxlLmdldCgpKTsK
</data>
<flag name="commit-queue"
          id="126832"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125360</attachid>
            <date>2012-02-03 10:30:21 -0800</date>
            <delta_ts>2012-02-03 11:44:07 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>stylepropertyset-8.patch</filename>
            <type>text/plain</type>
            <size>156330</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjY2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwNSBAQAorMjAxMi0wMi0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzQwCisgICAgICAgIFNwbGl0IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uIGludG8gc2VwYXJhdGUgaW50ZXJuYWwgYW5kIENTU09NIHR5cGVzIAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHRoZSBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiBpbnRvIGFuIGludGVybmFsIHR5cGUgKFN0eWxlUHJv
cGVydHlTZXQpIGFuZCBhIENTU09NIGltcGxlbWVudGF0aW9uIHR5cGUgKFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIAorICAgICAgICBUbyBrZWVwIHRoaW5ncyBzb21l
d2hhdCBtYW5hZ2VhYmxlLCB0aGlzIHBhdGNoIGRvZXMgTk9UCisKKyAgICAgICAgLSByZW5hbWUg
b3IgYWRkIGFueSBmaWxlcyAoc28gZmlsZXMgbmFtZXMgd29uJ3QgbWF0Y2ggdHlwZXMpCisgICAg
ICAgIC0gcmVuYW1lIGZpZWxkcywgbWV0aG9kcyBvciB2YXJpYWJsZXMgdG8gbWF0Y2ggbmV3IHR5
cGUgbmFtZXMgKGxpa2UgQ1NTU3R5bGVSdWxlOjpkZWNsYXJhdGlvbigpIC0+IENTU1N0eWxlUnVs
ZTo6cHJvcGVydHlTZXQoKSkKKyAgICAgICAgLSB0cnkgdG8gcmVhbGl6ZSBhbnkgbWVtb3J5IG9y
IHBlcmZvcm1hbmNlIGdhaW5zIChTdHlsZVByb3BlcnR5U2V0IGxvc2VzIHRoZSB2cHRyIGJ1dCBn
YWlucyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qKQorCisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQ
cm9wZXJ0aWVzSW5TZXQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VSdWxlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVJ1bGU6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlUnVsZTo6ZGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxl
OjpzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChDU1NGb250RmFjZVJ1bGUpOgorICAgICAgICAq
IGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5jcHA6CisgICAgICAgIChQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmNvbnRleHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmJvcmRlclNwYWNpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjphcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5U2hvcnRoYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmlzUHJvcGVydHlJbXBsaWNpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UHJvcGVydHlTZXQ6OmNvcHlCbG9ja1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldDo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVByb3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
c2V0Q3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eSk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5U2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246Om1ha2VNdXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3R5
bGVQcm9wZXJ0eVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlSW5saW5lKToK
KyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvclZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNy
ZWF0ZVN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZvbnRG
YWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVSdWxlKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1Bh
cnNlcik6CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICogY3NzL0NT
U1N0eWxlUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpzdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OnNldERlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6ZGVjbGFyYXRpb24pOgorICAgICAgICAoQ1NTU3R5bGVS
dWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpsZWZ0VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9M
ZWZ0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRk
TWF0Y2hlZERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnNpZGVSZWdp
b25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJh
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVs
ZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAo
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKiBjc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlm
cmFtZVJ1bGU6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lUnVs
ZTo6ZGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKToKKyAgICAg
ICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENT
U01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0F0dHJpYnV0ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6QXR0cmlidXRlOjpkZWNsKToKKyAgICAgICAgKiBkb20vQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uOjpkZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjo6Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24pOgor
ICAgICAgICAoQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlQ1NTU3R5bGVE
ZWNsYXJhdGlvbik6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAg
ICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmVuc3VyZUlubGluZVN0eWxlRGVj
bCk6CisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWROb2RlTWFwOjppbmxpbmVTdHlsZURlY2wpOgorICAgICAgICAoTmFtZWROb2RlTWFwKToKKyAg
ICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRF
bGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRF
bGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGRv
bS9TdHlsZWRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRp
dGlvbmFsQXR0cmlidXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6
aW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZv
bnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAgKiBl
ZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICogZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29weUVkaXRpbmdQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRFcXVpdmFs
ZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoSFRNTEVsZW1lbnRFcXVpdmFs
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1By
ZXNlbnRJblN0eWxlKToKKyAgICAgICAgKEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlF
eGlzdHNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2
YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZSk6CisgICAgICAgIChIVE1MQXR0cmlidXRlRXF1
aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFs
dWVJc1ByZXNlbnRJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1dGVFcXVp
dmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UkdCQUZvbnRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnNldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVP
ZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHls
ZWRTcGFuT3JIVE1MRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hl
c0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1l
cmdlU3R5bGVGcm9tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZW1v
dmVQcm9wZXJ0aWVzSW5TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJl
bW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpmb3JjZUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHREZWNvcmF0
aW9uUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0
U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZmZUZXh0RGVjb3JhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUZXh0
QWxpZ25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3BlcnRpZXNOb3RJbik6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRJZGVudGlmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNU
cmFuc3BhcmVudENvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aGFzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6Y3JlYXRlKToK
KyAgICAgICAgKEVkaXRpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OnN0eWxlKToKKyAgICAgICAgKFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQp
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBseUNvbW1hbmRUb0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVBcHBseVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0
KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcv
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVDU1NQ
cm9wZXJ0eUNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSk6CisgICAg
ICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZSk6CisgICAgICAgICog
aHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVDZWxsRWxlbWVudDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVDZWxsRWxlbWVudCk6
CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSk6CisgICAg
ICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVDb2xF
bGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bGVha0JvcmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbENlbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpsZWFrR3JvdXBCb3JkZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVt
ZW50OjphZGRpdGlvbmFsR3JvdXBTdHlsZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVt
ZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxU
YWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
KToKKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdEJ1YmJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6
OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dDo6cmVzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVs
ZW1lbnQ6Om1ha2VPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFuZWxF
bGVtZW50OjptYWtlVHJhbnNwYXJlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0xpbWl0ZXJFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckF0dHJpYnV0ZVN0
eWxlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0eWxlQXR0
cmlidXRlUmFuZ2VzKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAg
KiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxp
emVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBhZ2VTZXJp
YWxpemVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5zdHlsZWRBcHBs
ZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OlNWR0ZvbnRGYWNlRWxlbWVudCk6CisK
IDIwMTItMDItMDMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEZpeCB0eXBvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTA2NjYwKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2
ICs1MTgsNyBAQCBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxOHdpbmRvd1NjCiBfX1pO
N1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyMGV4ZWN1dGVTY3JpcHRJbldvcmxkRVBOU18xNURP
TVdyYXBwZXJXb3JsZEVSS04zV1RGNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRy
b2xsZXIyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRy
b2xsZXIyNGpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudEVQTlNfMTdIVE1MUGx1Z0luRWxlbWVudEUK
K19fWk43V2ViQ29yZTE2U3R5bGVQcm9wZXJ0eVNldDVkZXJlZkV2CiBfX1pON1dlYkNvcmUxNlRo
cmVhZEdsb2JhbERhdGExMHN0YXRpY0RhdGFFCiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERh
dGFDMUV2CiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGFEMUV2CkBAIC02NzMsNyArNjc0
LDYgQEAgX19aTjdXZWJDb3JlMjVhZGRMYW5ndWFnZUNoYW5nZU9ic2VydmVyRQogX19aTjdXZWJD
b3JlMjVjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzRU5TXzE3Vmlld3BvcnRBcmd1bWVudHNFaWlp
aU5TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMjVjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lRXYK
IF9fWk43V2ViQ29yZTI1d2luZG93c0tleUNvZGVGb3JLZXlFdmVudEVQN05TRXZlbnQKLV9fWk43
V2ViQ29yZTI2Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25DMUV2CiBfX1pON1dlYkNvcmUyNlVz
ZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yMjdwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmVFdgog
X19aTjdXZWJDb3JlMjZVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcjI4Zm9jdXNlZEVsZW1lbnRB
dEdlc3R1cmVTdGFydEV2CiBfX1pON1dlYkNvcmUyNmNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
RXYKQEAgLTEyOTYsNiArMTI5Niw3IEBAIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQx
NWlzUGFzc3cKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxOHNob3VsZEF1dG9jb21w
bGV0ZUV2CiBfX1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzZVBhdGhFdgog
X19aTks3V2ViQ29yZTE2UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2CitfX1pOSzdX
ZWJDb3JlMTZTdHlsZVByb3BlcnR5U2V0MjVlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9f
Wk5LN1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb24xN2lzQ29udGVudEVkaXRhYmxlRXYKIF9fWk5L
N1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb24xN3RvTm9ybWFsaXplZFJhbmdlRXYKIF9fWk5LN1dl
YkNvcmUxNlZpc2libGVTZWxlY3Rpb24xOXJvb3RFZGl0YWJsZUVsZW1lbnRFdgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJ
KHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTE0LDEyICsyNTE0LDEyIEBAIGJv
b2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm8KICAgICByZXR1cm4gdmFsdWUg
JiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwogfQog
Ci1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmNvcHkoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdAogewogICAgIHJldHVybiBj
b3B5UHJvcGVydGllc0luU2V0KGNvbXB1dGVkUHJvcGVydGllcywgbnVtQ29tcHV0ZWRQcm9wZXJ0
aWVzKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJsZSgpCitQYXNzUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQogewog
ICAgIHJldHVybiBjb3B5KCk7CiB9CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gQ1NTQ29tcHV0ZWRTdHlsCiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2ln
bmVkIGxlbmd0aCkgY29uc3QKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0Owog
ICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwpAQCAtMjU3MSw3ICsyNTcx
LDcgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQwogICAgICAgICBp
ZiAodmFsdWUpCiAgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZh
bHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKICAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUobGlzdCk7CisgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShsaXN0KTsKIH0KIAogQ1NTUnVsZSogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpwYXJlbnRSdWxlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTUgKzI4LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7
Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1ByaW1pdGl2ZVZh
bHVlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29sOworY2xhc3MgQ29s
b3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBTaGFkb3dEYXRhOwog
Y2xhc3MgU1ZHUGFpbnQ7CitjbGFzcyBTaGFkb3dEYXRhOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNl
dDsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIGNsYXNzIEN1c3RvbUZpbHRlck51bWJlclBh
cmFtZXRlcjsKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRQcm9wZXJ0
eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKICAgICBib29sIGdldFByb3BlcnR5UHJpb3Jp
dHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCk7CiAKICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlELCBFVXBk
YXRlTGF5b3V0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRGb250U2l6ZUNT
U1ZhbHVlUHJlZmVycmluZ0tleXdvcmQoKSBjb25zdDsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFNWR1Byb3BlcnR5Q1NTVmFsdWUoaW50IHBy
b3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGlu
dCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVu
Z3RoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24o
UGFzc1JlZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSwgY29uc3QgU3RyaW5nJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCShyZXZpc2lvbiAxMDY2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDE5ICs0MiwxOSBAQCBwdWJsaWM6CiAKICAgICB+Q1NTRm9udEZhY2VSdWxlKCk7CiAK
LSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUu
Z2V0KCk7IH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQogCiAgICAgU3RyaW5nIGNz
c1RleHQoKSBjb25zdDsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldERlY2xh
cmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKSB7IG1f
c3R5bGUgPSBzdHlsZTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KIAog
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMp
OwogCiBwcml2YXRlOgogICAgIENTU0ZvbnRGYWNlUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQp
OwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX3N0eWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlz
aW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjppc0Vt
cHR5KCkgY29uc3QKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3Qg
Q1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUpCiB7CiAgICAgLy8gT2J0YWluIHRoZSBmb250
LWZhbWlseSBwcm9wZXJ0eSBhbmQgdGhlIHNyYyBwcm9wZXJ0eS4gIEJvdGggbXVzdCBiZSBkZWZp
bmVkLgotICAgIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGZvbnRG
YWNlUnVsZS0+ZGVjbGFyYXRpb24oKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSA9IGZvbnRGYWNlUnVsZS0+ZGVjbGFyYXRpb24oKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZv
bnRGYW1pbHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHkpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlTcmMpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZVJhbmdlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
Y3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0eVNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uKHByb3BlcnR5U2V0KSk7IAorICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0
eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0
UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcg
Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBw
cmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQ
cm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICAKKyAg
ICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IGNvcHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gbWFrZU11dGFibGUoKSBPVkVSUklERTsKKyAgICAKKyAgICBSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gbV9wcm9wZXJ0eVNldDsKK307CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNz
IFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKTsKIHB1YmxpYzoKLSAgICBTdHlsZUF0dHJpYnV0
ZU11dGF0aW9uU2NvcGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2wpCiAgICAgewog
ICAgICAgICArK3Nfc2NvcGVDb3VudDsKIApAQCAtOTIsNyArMTI2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIg
aW50ZXJuYWwgc3RhdGUgYmVmb3JlIGNhbGxpbmcgSW5zcGVjdG9yJ3MgY29kZS4KLSAgICAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNfY3VycmVu
dERlY2w7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNf
Y3VycmVudERlY2w7CiAgICAgICAgIHNfY3VycmVudERlY2wgPSAwOwogICAgICAgICBzX3Nob3Vs
ZE5vdGlmeUluc3BlY3RvciA9IGZhbHNlOwogICAgICAgICBpZiAobG9jYWxDb3B5U3R5bGVEZWNs
LT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVu
dEVsZW1lbnQoKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1l
bnQoKSkKQEAgLTExNCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IHVuc2lnbmVkIHNfc2NvcGVDb3VudDsKLSAgICBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHNfY3VycmVudERlY2w7CisgICAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHNfY3Vy
cmVudERlY2w7CiAgICAgc3RhdGljIGJvb2wgc19zaG91bGROb3RpZnlJbnNwZWN0b3I7CiAjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZERlbGl2
ZXI7CkBAIC0xMjUsNyArMTU5LDcgQEAgcHJpdmF0ZToKIH07CiAKIHVuc2lnbmVkIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZTo6c19zY29wZUNvdW50ID0gMDsKLUNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAw
OworU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJl
bnREZWNsID0gMDsKIGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZE5v
dGlmeUluc3BlY3RvciA9IGZhbHNlOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiBi
b29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGREZWxpdmVyID0gZmFsc2U7
CkBAIC0xMzMsMzEgKzE2NywzMCBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6
c19zaG91CiAKIH0gLy8gbmFtZXNwYWNlCiAKLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3Bl
cnR5U2V0KCkKICAgICA6IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKICAgICAsIG1faXNJbmxpbmVT
dHlsZURlY2xhcmF0aW9uKGZhbHNlKQogICAgICwgbV9wYXJlbnQoc3RhdGljX2Nhc3Q8Q1NTUnVs
ZSo+KDApKQogewogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSkKK1N0eWxlUHJvcGVydHlTZXQ6OlN0
eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSkKICAgICA6IG1fc3RyaWN0UGFyc2lu
ZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAgLCBt
X2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fcGFyZW50KHBhcmVudFJ1
bGUpCiB7CiB9CiAKLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+
JiBwcm9wZXJ0aWVzKQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxl
KiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogICAg
IDogbV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCiAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVu
dFJ1bGUgfHwgcGFyZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQogICAgICwgbV9pc0lubGlu
ZVN0eWxlRGVjbGFyYXRpb24oZmFsc2UpCiAgICAgLCBtX3BhcmVudChwYXJlbnRSdWxlKQogewog
ICAgIG1fcHJvcGVydGllcy5zaHJpbmtUb0ZpdCgpOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93
cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KIH0KIAotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENT
U1Byb3BlcnR5KiBjb25zdCAqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQorU3R5bGVQ
cm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBD
U1NQcm9wZXJ0eSogY29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKICAgICA6
IG1fc3RyaWN0UGFyc2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJz
aW5nKCkpCiAgICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1f
cGFyZW50KHBhcmVudFJ1bGUpCkBAIC0xODEsMTggKzIxNCwzMCBAQCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0CiAgICAgfQogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oU3R5bGVkRWxlbWVudCogcGFyZW50
RWxlbWVudCkgCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1l
bnQqIHBhcmVudEVsZW1lbnQpIAogICAgIDogbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQogICAgICwg
bV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24odHJ1ZSkKICAgICAsIG1fcGFyZW50KHBhcmVudEVs
ZW1lbnQpCiB7IAogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6fkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKCkKK1N0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkK
IHsKIH0KIAotQ1NTU3R5bGVTaGVldCogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnRl
eHRTdHlsZVNoZWV0KCkgY29uc3QKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6ZGVyZWYoKQorewor
ICAgIGlmIChkZXJlZkJhc2UoKSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAvLyBTdHlsZVByb3BlcnR5U2V0IGFuZCBDU1NTdHlsZURlY2xhcmF0
aW9uIHJlZiBlYWNoIG90aGVyLiBXaGVuIHdlIGhhdmUgYSBkZWNsYXJhdGlvbiBhbmQKKyAgICAv
LyBvdXIgcmVmY291bnQgZHJvcHMgdG8gb25lIHdlIGtub3cgaXQgaXMgdGhlIG9ubHkgdGhpbmcg
a2VlcGluZyB1cyBhbGl2ZS4KKyAgICBpZiAobV9jc3NTdHlsZURlY2xhcmF0aW9uICYmIGhhc09u
ZVJlZigpKQorICAgICAgICBtX2Nzc1N0eWxlRGVjbGFyYXRpb24uY2xlYXIoKTsKK30KKworQ1NT
U3R5bGVTaGVldCogU3R5bGVQcm9wZXJ0eVNldDo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAog
ewogICAgIGlmIChtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbikgewogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX3BhcmVudC5lbGVtZW50ID8gbV9wYXJlbnQuZWxlbWVudC0+ZG9jdW1l
bnQoKSA6IDA7CkBAIC0yMDEsMTIgKzI0NiwxMiBAQCBDU1NTdHlsZVNoZWV0KiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvCiAgICAgcmV0dXJuIG1fcGFyZW50LnJ1bGUgPyBtX3BhcmVudC5ydWxl
LT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24mIG90aGVyKQordm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0Zyb20oY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCYgb3RoZXIpCiB7CiAgICAgbV9wcm9wZXJ0aWVzID0gb3RoZXIu
bV9wcm9wZXJ0aWVzOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0
eVNldDo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKIHsKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAg
ICBpZiAodmFsdWUpCkBAIC0zNzcsNyArNDIyLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpib3JkZXJTcGFjaW5nVmFsdWUoY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0pIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3BhY2luZ1Zh
bHVlKGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gaG9yaXpvbnRhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzBdKTsK
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVl
KHByb3BlcnRpZXNbMV0pOwpAQCAtMzkzLDcgKzQzOCw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Ym9yZGUKICAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCAr
ICcgJyArIHZlcnRpY2FsVmFsdWVDU1NUZXh0OwogfQogCi1ib29sIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjphcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoaW50IHByb3BlcnR5
SWQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCkgY29uc3QKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6
YXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KGludCBwcm9wZXJ0eUlkLCBTdHJpbmdC
dWlsZGVyJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5
ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SWQpOwogICAgIGlmICghcHJvcGVydHkpCkBA
IC00MjQsNyArNDY5LDcgQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXBwZW5k
RgogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmZvbnRWYWx1ZSgpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVl
KCkgY29uc3QKIHsKICAgICBjb25zdCBDU1NQcm9wZXJ0eSogZm9udFNpemVQcm9wZXJ0eSA9IGZp
bmRQcm9wZXJ0eVdpdGhJZChDU1NQcm9wZXJ0eUZvbnRTaXplKTsKICAgICBpZiAoIWZvbnRTaXpl
UHJvcGVydHkgfHwgZm9udFNpemVQcm9wZXJ0eS0+aXNJbXBsaWNpdCgpKQpAQCAtNDQ5LDcgKzQ5
NCw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Zm9udFYKICAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0CitTdHJpbmcgU3R5
bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0CiB7
CiAgICAgLy8gQXNzdW1lIHRoZSBwcm9wZXJ0aWVzIGFyZSBpbiB0aGUgdXN1YWwgb3JkZXIgdG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9wVmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMF0pOwpAQCAtNDc2LDcgKzUyMSw3IEBAIFN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFYKICAgICByZXR1cm4gcmVzOwog
fQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExheWVyZWRTaG9ydGhh
bmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAorU3RyaW5n
IFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHBy
b3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAogewogICAgIFN0cmluZyByZXM7CiAKQEAgLTU3
Nyw3ICs2MjIsNyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExhCiAg
ICAgcmV0dXJuIHJlczsKIH0KIAotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpn
ZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25z
dAorU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCog
cHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlczsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtNTk1LDcgKzY0MCw3IEBAIFN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0U2gKIH0KIAogLy8gb25seSByZXR1
cm5zIGEgbm9uLW51bGwgdmFsdWUgaWYgYWxsIHByb3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9u
LW51bGwgdmFsdWUKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0Q29tbW9u
VmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKK1N0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXRDb21tb25WYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNp
emVfdCBzaXplKSBjb25zdAogewogICAgIFN0cmluZyByZXM7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTYxMywxMyArNjU4LDEzIEBAIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0Q28KICAgICByZXR1cm4gcmVzOwogfQogCi1QYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJv
cGVydHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAg
ICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3Bl
cnR5SUQpOwogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKIH0K
IAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0
eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhbmdlZCkKIHsKICAgICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kID0gbG9uZ2hhbmRG
b3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWxvbmdoYW5kLmxlbmd0aCgpKQpAQCAt
NjI3LDcgKzY3Miw3IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVMK
ICAgICByZXR1cm4gcmVtb3ZlUHJvcGVydGllc0luU2V0KGxvbmdoYW5kLnByb3BlcnRpZXMoKSwg
bG9uZ2hhbmQubGVuZ3RoKCksIG5vdGlmeUNoYW5nZWQpOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5v
dGlmeUNoYW5nZWQsIGJvb2wgcmV0dXJuVGV4dCkKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpy
ZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJl
dHVyblRleHQpCiB7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBTdHlsZUF0
dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKQEAgLTY1OCw3ICs3MDMs
NyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0
eWxlUmVjYWxjKCkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
CiB7CiAgICAgaWYgKGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKSB7CiAgICAgICAgIFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQgPSBwYXJlbnRFbGVtZW50KCk7CkBAIC02NzAsMTMgKzcxNSwxMyBA
QCB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0
eWxlU2hlZXQoKSkgeworICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4
dFN0eWxlU2hlZXQoKSkgewogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVT
aGVldC0+ZmluZERvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3Rv
ckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgfQogfQogCi1ib29sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25z
dAorYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0
eUlEKSBjb25zdAogewogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9w
ZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKICAgICBpZiAocHJvcGVydHkpCkBAIC02OTMsMTkgKzcz
OCwxOSBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwcm9wZXJ0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWludCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0CitpbnQgU3R5bGVQcm9wZXJ0eVNldDo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
Q1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwog
ICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5zaG9ydGhhbmRJRCgpIDogMDsKIH0KIAot
Ym9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBw
cm9wZXJ0eUlEKSBjb25zdAorYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGlj
aXQoaW50IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3Bl
cnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwogICAgIHJldHVybiBwcm9wZXJ0
eSA/IHByb3BlcnR5LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0KIAotYm9vbCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxl
UHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQogewogI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0
aW9uU2NvcGUodGhpcyk7CkBAIC03MzcsNyArNzgyLDcgQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVy
dHksIENTU1Byb3BlcnR5KiBzbG90KQordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0
eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG90KQogewogI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNj
b3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CkBAIC03NTcsNyArODAyLDcgQEAgdm9pZCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogI2VuZGlmCiB9CiAKLWJvb2wgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUs
IGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlT
ZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBib29sIG5vdGlmeUNoYW5nZWQpCiB7CiAgICAgQ1NTUHJvcGVydHkgcHJvcGVydHkocHJvcGVy
dHlJRCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUpLCBpbXBvcnRh
bnQpOwogICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKQEAgLTc2Niw3ICs4MTEsNyBAQCBib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2Vk
KQogewogICAgIENTU1Byb3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUodmFsdWUsIHVuaXQpLCBpbXBvcnRhbnQpOwogICAgIHNldFByb3BlcnR5KHBy
b3BlcnR5KTsKQEAgLTc3NSw3ICs4MjAsNyBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRQcm9wCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0
aW9uKQordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmlu
ZyYgc3R5bGVEZWNsYXJhdGlvbikKIHsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQog
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwpAQCAt
NzkyLDcgKzgzNyw3IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnBhcnNlRGUK
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBw
cm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRk
UGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRpZXMsIGlu
dCBudW1Qcm9wZXJ0aWVzKQogewogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CkBAIC04MTAs
NyArODU1LDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFycwogICAg
IC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0
aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCiB9CiAKLXZvaWQgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHko
Y29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQogewogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cyk7CkBAIC04MjcsMTkgKzg3Miw3IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmFkZFBhcnMKICNlbmRpZgogfQogCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvcGVydHlDb3VudCgpOwotfQotCi1T
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QK
LXsKLSAgICBpZiAoaSA+PSBtX3Byb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgIHJldHVybiAiIjsK
LSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1f
cHJvcGVydGllc1tpXS5pZCgpKSk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6YXNUZXh0KCkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBj
b25zdAogewogICAgIFN0cmluZyByZXN1bHQgPSAiIjsKIApAQCAtOTAxLDE0ICs5MzQsNyBAQCBT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFzVGV4CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICAv
LyBGSVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KLSAgICBwYXJzZURlY2xh
cmF0aW9uKHRleHQpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptZXJn
ZShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogb3RoZXIsIGJvb2wgYXJnT3ZlcnJp
ZGVzT25Db25mbGljdCkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2UoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCkKIHsKICNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29w
ZSBtdXRhdGlvblNjb3BlKHRoaXMpOwpAQCAtOTM0LDkgKzk2MCw5IEBAIHZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246Om1lcmdlKGMKICAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1l
bnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9u
cyBpbiB0aGlzIGNsYXNzLgogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjph
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKK3ZvaWQgU3R5
bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
IHVybHMpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7
CisgICAgQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBjb250ZXh0U3R5bGVTaGVldCgpOwogICAgIHNp
emVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0aWVzW2ldLnZhbHVlKCktPmFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKHVybHMsIHNoZWV0KTsKQEAgLTk3MCwxNyArOTk2LDE3IEBAIHN0YXRp
YyBjb25zdCBpbnQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7CiAKIGNvbnN0IHVuc2lnbmVkIG51bUJs
b2NrUHJvcGVydGllcyA9IFdURl9BUlJBWV9MRU5HVEgoYmxvY2tQcm9wZXJ0aWVzKTsKIAotUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gY29weVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2Nr
UHJvcGVydGllcyk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92
ZUJsb2NrUHJvcGVydGllcygpCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUJsb2NrUHJv
cGVydGllcygpCiB7CiAgICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywg
bnVtQmxvY2tQcm9wZXJ0aWVzKTsKIH0KIAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVy
dGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hh
bmdlZCkKIHsKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTAyMSwxNyArMTA0Nyw3IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OnJlbW92ZVAKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om1ha2VN
dXRhYmxlKCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25z
dAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24o
MCwgbV9wcm9wZXJ0aWVzKSk7Ci19Ci0KLWNvbnN0IENTU1Byb3BlcnR5KiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKSBjb25zdAor
Y29uc3QgQ1NTUHJvcGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChp
bnQgcHJvcGVydHlJRCkgY29uc3QKIHsKICAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0aWVzLnNp
emUoKSAtIDEgOyBuID49IDA7IC0tbikgewogICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBtX3By
b3BlcnRpZXNbbl0ubV9pZCkKQEAgLTEwNDAsNyArMTA1Niw3IEBAIGNvbnN0IENTU1Byb3BlcnR5
KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXIKICAgICByZXR1cm4gMDsKIH0KIAotQ1NTUHJvcGVydHkq
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3Bl
cnR5SUQpCitDU1NQcm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElk
KGludCBwcm9wZXJ0eUlEKQogewogICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgp
IC0gMSA7IG4gPj0gMDsgLS1uKSB7CiAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVy
dGllc1tuXS5tX2lkKQpAQCAtMTA0OCwxMjUgKzEwNjQsMTkzIEBAIENTU1Byb3BlcnR5KiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjoKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CisgICAgCiti
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSog
cHJvcGVydHkpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+
Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7Cit9CisgICAgCit2b2lk
IFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHN0eWxlKQoreworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92
ZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5bGUtPnByb3BlcnR5TWF0
Y2hlcygmcHJvcGVydHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChw
cm9wZXJ0eS5pZCgpKTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
bWFzcyByZW1vdmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9S
ZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1Jl
bW92ZVtpXSk7Cit9CiAKLUNTU1J1bGUqIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwYXJl
bnRSdWxlKCkgY29uc3QKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFBy
b3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgcmV0dXJu
IHBhcmVudFJ1bGVJbnRlcm5hbCgpOworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92
ZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5
TWF0Y2hlcygmcHJvcGVydHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVu
ZChwcm9wZXJ0eS5pZCgpKTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1
c2UgbWFzcyByZW1vdmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
VG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNU
b1JlbW92ZVtpXSk7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9w
ZXJ0eVNldDo6Y29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVBy
b3BlcnR5U2V0KDAsIG1fcHJvcGVydGllcykpOworfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+IGxp
c3Q7CisgICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAgICAgIGlmICh2YWx1
ZSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVs
ZWFzZSgpLCBmYWxzZSkpOworICAgIH0KKyAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKGxpc3QpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0Ojpl
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3NzU3R5bGVE
ZWNsYXJhdGlvbikKKyAgICAgICAgbV9jc3NTdHlsZURlY2xhcmF0aW9uID0gUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4o
dGhpcykpOworICAgIHJldHVybiBtX2Nzc1N0eWxlRGVjbGFyYXRpb24uZ2V0KCk7Cit9CisKK3Vu
c2lnbmVkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpOworfQorCitTdHJpbmcg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0Cit7
CisgICAgaWYgKGkgPj0gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gIiI7CisgICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9w
ZXJ0eUlEPihtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUF0KGkpLmlkKCkpKTsKK30KKworQ1NTUnVs
ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cGFyZW50UnVsZUludGVybmFsKCk7CiB9CiAKLVN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CitTdHJpbmcg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYXNUZXh0KCk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFzVGV4dCgpOworfQor
ICAgIAordm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAg
Ly8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCisgICAgbV9wcm9wZXJ0
eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNl
dC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotU3RyaW5nIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVy
dHlOYW1lKQorU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKIHsKICAgICBpbnQgcHJvcGVydHlJ
RCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9w
ZXJ0eUlEKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9w
ZXJ0eUlEKTsKIH0KIAotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorU3RyaW5nIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkKIHsKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJv
cGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICByZXR1cm4gcHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSA/ICJpbXBvcnRh
bnQiIDogIiI7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5SXNJbXBvcnRhbnQo
cHJvcGVydHlJRCkgPyAiaW1wb3J0YW50IiA6ICIiOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKQorU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaW50IHByb3Bl
cnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlE
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJv
cGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CisgICAgaW50IHNob3J0aGFuZElEID0gbV9wcm9w
ZXJ0eVNldC0+Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CiAgICAgaWYgKCFzaG9y
dGhhbmRJRCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBnZXRQcm9wZXJ0
eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKIH0KIAotYm9v
bCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQorYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKICAgICBp
bnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXBy
b3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUlt
cGxpY2l0KHByb3BlcnR5SUQpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5pc1Byb3BlcnR5
SW1wbGljaXQocHJvcGVydHlJRCk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47
CiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxz
ZSkgIT0gbm90Rm91bmQ7CiAgICAgZWMgPSAwOwotICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOwogfQogCi1TdHJpbmcgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJv
cGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICBlYyA9IDA7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRy
dWUsIHRydWUpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5yZW1vdmVQcm9wZXJ0eShwcm9w
ZXJ0eUlELCB0cnVlLCB0cnVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQpCiB7IAotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQp
OyAKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0
eUlEKTsgCiB9CiAKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK1N0cmluZyBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQpCiB7IAotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQpOyAKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9w
ZXJ0eUlEKTsgCiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3Bl
cnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsgCiAgICAgZWMgPSAwOwotICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOworICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworfQorCitDU1NTdHlsZVNoZWV0KiBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoreyAK
KyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Y29udGV4dFN0eWxlU2hlZXQoKTsgCiB9CiAKLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0CitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5PiBs
aXN0OwotICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFs
dWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJl
bGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUobGlzdCk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmNvcHkoKTsK
IH0KIAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVz
KGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QKK1Bhc3NSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJsZSgpCiB7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVy
dHktPmlkKCkpOwotICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3Bl
cnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7CisgICAgQVNTRVJUKG1fcHJvcGVydHlTZXQtPm1fY3Nz
U3R5bGVEZWNsYXJhdGlvbiA9PSB0aGlzIHx8ICghbV9wcm9wZXJ0eVNldC0+bV9jc3NTdHlsZURl
Y2xhcmF0aW9uICYmIG1fcHJvcGVydHlTZXQtPmhhc09uZVJlZigpKSk7CisgICAgaWYgKCFtX3By
b3BlcnR5U2V0LT5tX2Nzc1N0eWxlRGVjbGFyYXRpb24pCisgICAgICAgIG1fcHJvcGVydHlTZXQt
Pm1fY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXM7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQ7
CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUVxdWl2YWxlbnRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorYm9vbCBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9w
ZXJ0eSogcHJvcGVydHkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVt
b3ZlOwotICAgIHNpemVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbaV07Ci0gICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVy
dHlNYXRjaGVzKCZwcm9wZXJ0eSkpCi0gICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBw
ZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSBtYXNzIHJlbW92YWwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRp
ZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGll
c1RvUmVtb3ZlW2ldKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRjaGVz
KHByb3BlcnR5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEw
NjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzMyArMzEsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRF
bGVtZW50OwogCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NT
dHlsZURlY2xhcmF0aW9uIHsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291
bnRlZDxTdHlsZVByb3BlcnR5U2V0PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24oKTsKKyAgICB+U3R5bGVQcm9wZXJ0eVNldCgpOwogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNyZWF0ZSgpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24pOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQpOwogICAgIH0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKENTU1J1
bGUqIHBhcmVudFJ1bGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
Y3JlYXRlKENTU1J1bGUqIHBhcmVudFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBhcmVudFJ1bGUpKTsKICAgICB9
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNyZWF0
ZShDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRp
ZXMsIGludCBudW1Qcm9wZXJ0aWVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IGNyZWF0ZShDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29u
c3QqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihwYXJlbnRSdWxlLCBwcm9w
ZXJ0aWVzLCBudW1Qcm9wZXJ0aWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5
bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxlLCBwcm9wZXJ0aWVzLCBudW1Qcm9wZXJ0aWVzKSk7CiAg
ICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBj
cmVhdGUoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoY29uc3QgVmVjdG9yPENTU1Byb3Bl
cnR5PiYgcHJvcGVydGllcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwgcHJvcGVydGllcykpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgcHJvcGVydGllcykpOwogICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlSW5s
aW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gY3JlYXRlSW5saW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgeyAK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihl
bGVtZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChl
bGVtZW50KSk7CiAgICAgfQogCisgICAgdm9pZCBkZXJlZigpOworCiAgICAgdW5zaWduZWQgcHJv
cGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNFbXB0eSgpOyB9CiAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGVydGllc1tpbmRleF07IH0KQEAgLTY4LDggKzcxLDYgQEAgcHVibGljOgog
ICAgIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAgICAg
Ym9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7
Ci0KICAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wg
aW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
ZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wg
aW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVl
LCB1bml0LCBpbXBvcnRhbnQsIHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSkgeyBy
ZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSk7IH0K
QEAgLTg3LDExICs4OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBkb2VzIG5vIGNoYW5nZSBu
b3RpZmljYXRpb25zIHNpbmNlIGl0J3Mgb25seSBjYWxsZWQgYnkgY3JlYXRlTWFya3VwLgogICAg
IHZvaWQgYWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKIAotICAgIFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9ja1Byb3BlcnRp
ZXMoKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQg
cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsg
cmVtb3ZlUHJvcGVydGllc0luU2V0KHNldCwgbGVuZ3RoLCB0cnVlKTsgfQogCi0gICAgdm9pZCBt
ZXJnZShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJnT3ZlcnJpZGVz
T25Db25mbGljdCA9IHRydWUpOworICAgIHZvaWQgbWVyZ2UoY29uc3QgU3R5bGVQcm9wZXJ0eVNl
dCosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwogCiAgICAgdm9pZCBzZXRT
dHJpY3RQYXJzaW5nKGJvb2wgYikgeyBtX3N0cmljdFBhcnNpbmcgPSBiOyB9CiAgICAgYm9vbCB1
c2VTdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9CkBAIC05
OSwxMiArMTAwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKIAorICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gY29weSgpIGNvbnN0OwogICAgIC8vIFVzZWQgYnkgU3R5bGVkRWxlbWVudDo6Y29weU5vbkF0
dHJpYnV0ZVByb3BlcnRpZXMoKS4KLSAgICB2b2lkIGNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY29weVByb3BlcnRpZXNGcm9t
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmKTsKIAorICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVudFBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOwogICAgIHZvaWQgcmVtb3ZlRXF1aXZh
bGVudFByb3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwogCi0gICAgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25z
dCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3Q7CiAKICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlSW50ZXJuYWwoKSBjb25z
dCB7IHJldHVybiBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA/IDAgOiBtX3BhcmVudC5ydWxl
OyB9CiAgICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVCghbV9pc0lubGluZVN0eWxl
RGVjbGFyYXRpb24pOyBtX3BhcmVudC5ydWxlID0gMDsgfQpAQCAtMTE1LDMyICsxMTgsMTUgQEAg
cHVibGljOgogICAgIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3Q7CiAg
ICAgCiAgICAgU3RyaW5nIGFzVGV4dCgpIGNvbnN0OworICAgIAorICAgIENTU1N0eWxlRGVjbGFy
YXRpb24qIGVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mKTsKLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBD
U1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKFN0eWxlZEVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKLQotICAgIC8vIENT
U09NIGZ1bmN0aW9ucy4gRG9uJ3QgbWFrZSB0aGVzZSBwdWJsaWMuCi0gICAgdmlydHVhbCBDU1NS
dWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFBy
b3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwg
U3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgU3R5bGVQcm9wZXJ0
eVNldCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSk7CisgICAg
U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJv
cGVydHk+Jik7CisgICAgU3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25z
dCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOworICAgIFN0eWxlUHJv
cGVydHlTZXQoU3R5bGVkRWxlbWVudCopOwogCiAgICAgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CiAKQEAgLTE2MSw5ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0UHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29s
IG5vdGlmeUNoYW5nZWQpOwogICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHBy
b3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAgICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVz
SW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2Vk
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVy
dHkqKSBjb25zdDsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCB7IHJldHVybiBjb250ZXh0U3R5bGVTaGVldCgpOyB9CisgICAgYm9vbCBwcm9wZXJ0
eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKIAogICAgIGNvbnN0IENTU1Byb3Bl
cnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OwogICAgIENTU1By
b3BlcnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpOwpAQCAtMTc4LDcgKzE2
MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBQYXJlbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
OiBlbGVtZW50KGVsZW1lbnQpIHsgfQogICAgICAgICBDU1NSdWxlKiBydWxlOwogICAgICAgICBT
dHlsZWRFbGVtZW50KiBlbGVtZW50OwotICAgIH0gbV9wYXJlbnQ7ICAgIAorICAgIH0gbV9wYXJl
bnQ7CisgICAgCisgICAgbXV0YWJsZSBSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uPiBtX2Nzc1N0eWxlRGVjbGFyYXRpb247CisgICAgCisgICAgZnJpZW5kIGNsYXNzIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOwogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDU1NTZWxlY3Rvckxpc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbG9yUHJvcGVydHlJRChpbnQKICAgICB9CiB9CiAK
LXN0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBp
bXBvcnRhbnQsIGJvb2wgc3RyaWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9
IDApCitzdGF0aWMgYm9vbCBwYXJzZUNvbG9yVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFy
YXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgc3RyaWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApCiB7
CiAgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQw
OSw3ICs0MDksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0CiAg
ICAgfQogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgYm9vbCBzdHJpY3QsIENTU1N0eWxlU2hlZXQqIGNv
bnRleHRTdHlsZVNoZWV0ID0gMCkKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUo
U3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0LCBDU1NTdHlsZVNoZWV0KiBj
b250ZXh0U3R5bGVTaGVldCA9IDApCiB7CiAgICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVOdW1iZXJz
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTQ5OCw3ICs0OTgs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGVWYWx1CiAgICAgcmV0dXJu
IHBhcnNlci5wYXJzZVZhbHVlKG1hcHBlZEF0dHJpYnV0ZS0+ZGVjbGFyYXRpb24oKSwgcHJvcGVy
dHlJZCwgdmFsdWUsIGZhbHNlLCBlbGVtZW50U2hlZXQpOwogfQogCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3Ry
aWN0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFy
YXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgc3RyaWN0KQogewogICAgIGlmIChwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xh
cmF0aW9uLCBwcm9wZXJ0eUlkLCBzdHJpbmcsIGltcG9ydGFudCwgc3RyaWN0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC01MDgsNyArNTA4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTTXV0YWJsZVN0eQogICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlv
biwgcHJvcGVydHlJZCwgc3RyaW5nLCBpbXBvcnRhbnQpOwogfQogCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxl
U2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5
bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0
KQogewogICAgIGlmIChjb250ZXh0U3R5bGVTaGVldCkKICAgICAgICAgc2V0U3R5bGVTaGVldChj
b250ZXh0U3R5bGVTaGVldCk7CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBh
cnNlU2VsZWN0b3IoY29uc3QgU3RyaQogICAgIEFTU0VSVChkdW1teVN0eWxlU2hlZXQtPmhhc09u
ZVJlZigpKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgQ1NTU3R5bGVTaGVldCog
Y29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHls
ZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxD
U1NTdHlsZVNvdXJjZURhdGE+KiBzdHlsZVNvdXJjZURhdGEsIENTU1N0eWxlU2hlZXQqIGNvbnRl
eHRTdHlsZVNoZWV0KQogewogICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIg
cHJlZml4LgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAxNTsKQEAg
LTg4NDcsNyArODg0Nyw3IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZl
Y3QKICAgICAgICAgcnVsZS0+YWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAg
ICAgaWYgKG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZh
Y2VPbmx5VmFsdWVzKCk7Ci0gICAgICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBt
X251bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHJ1bGUuZ2V0KCksIG1fcGFyc2VkUHJvcGVydGllcywgbV9u
dW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAgICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAg
ICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICAgICAgaWYgKG1f
cnVsZVJhbmdlTWFwKSB7CkBAIC04ODg2LDcgKzg4ODYsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6
OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiAgICAgICAgIH0KICAgICB9CiAgICAgUmVmUHRyPENTU0Zv
bnRGYWNlUnVsZT4gcnVsZSA9IENTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCk7
Ci0gICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNy
ZWF0ZShydWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGll
cykpOworICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShy
dWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwog
ICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIENTU0ZvbnRGYWNlUnVsZSogcmVzdWx0ID0gcnVs
ZS5nZXQoKTsKICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CkBAIC04
OTU3LDcgKzg5NTcsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NP
CiAgICAgICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2VsZWN0b3JWZWN0
b3I7CiAgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAg
ICBydWxlLT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcnVs
ZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShydWxl
LmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAg
ICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUocnVsZS5n
ZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKICAgICAg
ICAgcGFnZVJ1bGUgPSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChy
dWxlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtOTA0MSw3ICs5MDQxLDcgQEAgV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZQogCiAgICAgUmVmUHRyPFdlYktpdENTU0tleWZy
YW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0ZShtX3N0eWxl
U2hlZXQpOwogICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZyk7Ci0gICAga2V5ZnJh
bWUtPnNldERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoa2V5
ZnJhbWUuZ2V0KCksIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7
CisgICAga2V5ZnJhbWUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShr
ZXlmcmFtZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMp
KTsKIAogICAgIGNsZWFyUHJvcGVydGllcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5o
CShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU7CiBjbGFzcyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNs
YXJhdGlvbjsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUHJp
bWl0aXZlVmFsdWU7CiBjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDU1NQcm9wZXJ0eTsKQEAg
LTU4LDYgKzU3LDcgQEAgY2xhc3MgQ1NTV3JhcFNoYXBlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBNZWRpYUxpc3Q7CiBjbGFzcyBNZWRpYVF1ZXJ5RXhwOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNl
dDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CiBj
bGFzcyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOwpAQCAtNzAsMTEgKzcwLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIGludCBz
dGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFwID0gMCk7
CiAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0
IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBwYXJzZUtl
eWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJv
b2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCk7CisgICAgc3RhdGljIGJv
b2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNv
bG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwog
ICAgIHN0YXRpYyBib29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3Ry
aW5nJiwgRG9jdW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJz
ZVZhbGlkUHJpbWl0aXZlKGludCBwcm9wSWQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBw
YXJzZURlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5n
JiwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qID0gMCwgQ1NTU3R5bGVTaGVldCogY29udGV4
dFN0eWxlU2hlZXQgPSAwKTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0
eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiA9IDAsIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CiAgICAgYm9vbCBwYXJzZU1lZGlh
UXVlcnkoTWVkaWFMaXN0KiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgYm9vbCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZVZhbHVlKENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiwgU3R5
bGVkRWxlbWVudCosIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmKTsKQEAgLTM1OCw3ICsz
NTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKENTU1BhcnNl
clZhbHVlKikgY29uc3Q7CiAgICAgYm9vbCBwYXJzZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclZh
bHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIAotICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wg
aW1wb3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApOworICAgIGJv
b2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7
CiAKICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgTm9uZSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2NjYwKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NQcm9wZXJ0eTsKIGNsYXNzIENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFz
cyBTdHlsZWRFbGVtZW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNTksOCAr
NTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRl
cm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpID0gMDsK
IAogICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAko
cmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyBzZWxl
Y3RvclRleHQoKSBjb25zdDsKICAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcm
KTsKIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZS5nZXQoKTsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOyB9CiAKICAgICBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlz
dC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0
aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKSB7IEFTU0VS
VChzdHlsZS0+cGFyZW50UnVsZUludGVybmFsKCkgPT0gdGhpcyk7IG1fc3R5bGUgPSBzdHlsZTsg
fQorICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZSkgeyBBU1NFUlQoc3R5bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOyBtX3N0
eWxlID0gc3R5bGU7IH0KIAogICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvckxpc3Q7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9
CisgICAgU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlLmdldCgpOyB9CiAKICAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzKTsKIApAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2xlYW51cCgpOwogICAgIFN0cmluZyBnZW5lcmF0ZVNlbGVjdG9yVGV4dCgpIGNvbnN0OwogCi0g
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBtX3N0eWxlOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVj
dG9yTGlzdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDE3ICsyOTcsMTcgQEAgc3RhdGljIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50RQogICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7
CiB9CiAKLXN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpCitzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVmdFRvUmlnaHREZWNsYXJhdGlv
bigpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+LCBsZWZ0VG9SaWdodERlY2wsIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiwgbGVmdFRvUmlnaHREZWNsLCAoU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKICAg
ICBpZiAobGVmdFRvUmlnaHREZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgIGxlZnRUb1JpZ2h0RGVj
bC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKICAgICBy
ZXR1cm4gbGVmdFRvUmlnaHREZWNsLmdldCgpOwogfQogCi1zdGF0aWMgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQorc3RhdGljIFN0eWxlUHJvcGVy
dHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgcmlnaHRUb0xlZnREZWNsLCAo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIHJpZ2h0VG9MZWZ0RGVjbCwgKFN0eWxl
UHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7CiAgICAgaWYgKHJpZ2h0VG9MZWZ0RGVjbC0+aXNFbXB0
eSgpKQogICAgICAgICByaWdodFRvTGVmdERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7CiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsK
QEAgLTc0Nyw3ICs3NDcsNyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNG
b3JFCiAgICAgQVNTRVJUX1VOVVNFRChsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCwgbG9hZGVk
TWF0aE1MVXNlckFnZW50U2hlZXQgfHwgZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpLnNpYmxpbmdS
dWxlcy5pc0VtcHR5KCkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWRE
ZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwg
dW5zaWduZWQgbGlua01hdGNoVHlwZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hl
ZERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUpCiB7CiAgICAgbV9tYXRjaGVkRGVjbHMuZ3JvdyhtX21hdGNoZWREZWNs
cy5zaXplKCkgKyAxKTsKICAgICBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiYgbmV3RGVjbGFyYXRp
b24gPSBtX21hdGNoZWREZWNscy5sYXN0KCk7CkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3Bl
cnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KLSAg
ICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFy
YXRpb24oKTsKKyAgICAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2wgPSBydWxlLT5kZWNs
YXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFkZWNsIHx8IChkZWNsLT5pc0VtcHR5KCkgJiYg
IWluY2x1ZGVFbXB0eVJ1bGVzKSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aEFsbFJ1bGVzKE1hdAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQg
ZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFu
IGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8g
YWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9u
IHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgaWYgKFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYWRkaXRpb25hbFN0eWxlID0gbV9zdHlsZWRFbGVt
ZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKSkgeworICAgICAgICBpZiAoUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IGFkZGl0aW9uYWxTdHlsZSA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRp
b25hbEF0dHJpYnV0ZVN0eWxlKCkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0
QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKICAgICAgICAgICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7CkBAIC0xMDM1LDcg
KzEwMzUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0CiAKICAg
ICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVudC0+aW5s
aW5lU3R5bGVEZWNsKCk7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZURlY2wgPSBt
X3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwogICAgICAgICBpZiAoaW5saW5lRGVj
bCkgewogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hl
ZERlY2xzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSA9PSAtMSkKQEAgLTE1MzAsNyArMTUzMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IENTU1N0eWxlU2VsZWN0b3IKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBj
b25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZSwgS2V5ZnJhbWVWYWx1ZSYg
a2V5ZnJhbWUpCiB7Ci0gICAgaWYgKGtleWZyYW1lUnVsZS0+c3R5bGUoKSkKKyAgICBpZiAoa2V5
ZnJhbWVSdWxlLT5kZWNsYXJhdGlvbigpKQogICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
a2V5ZnJhbWVSdWxlLT5kZWNsYXJhdGlvbigpKTsKIAogICAgIEFTU0VSVCghbV9zdHlsZSk7CkBA
IC0xNTcwLDcgKzE1NzAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVj
dG9yCiAjZW5kaWYKIAogICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRv
IHRoZSBrZXlmcmFtZS4KLSAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
RGVjbGFyYXRpb24gPSBrZXlmcmFtZVJ1bGUtPmRlY2xhcmF0aW9uKCkpIHsKKyAgICBpZiAoU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lUnVsZS0+ZGVjbGFyYXRp
b24oKSkgewogICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlv
bi0+cHJvcGVydHlDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJv
cGVydHlDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBpbnQgcHJvcGVydHkgPSBzdHlsZURlY2xh
cmF0aW9uLT5wcm9wZXJ0eUF0KGkpLmlkKCk7CkBAIC0yNDM1LDcgKzI0MzUsNyBAQCBzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByCiAgICAgcmV0dXJuIGNvbnZlcnRUb0xl
bmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgdHJ1ZSwgbXVsdGlwbGllciwg
b2spOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNJbnNpZGVSZWdpb25SdWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uKQorc3RhdGljIGlubGluZSBib29s
IGlzSW5zaWRlUmVnaW9uUnVsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uKQog
ewogICAgIEFTU0VSVChzdHlsZURlY2xhcmF0aW9uKTsKIApAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGlzSW5zaWRlUmVnaW9uUnVsZShDUwogfQogCiB0ZW1wbGF0ZSA8
Ym9vbCBhcHBseUZpcnN0Pgotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9u
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uLCBib29sIGlzSW1w
b3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNz
UnVsZShkb2N1bWVudCgpLCBzdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSk7
CiAgICAgYm9vbCBzdHlsZURlY2xhcmF0aW9uSW5zaWRlUmVnaW9uUnVsZSA9IG1fcmVnaW9uRm9y
U3R5bGluZyA/IGlzSW5zaWRlUmVnaW9uUnVsZShzdHlsZURlY2xhcmF0aW9uKSA6IGZhbHNlOwpA
QCAtMjUwMSw3ICsyNTAxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0
aW9ucwogCiAgICAgaWYgKG1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7
CiAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsK
LSAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9u
ID0gbV9tYXRjaGVkRGVjbHNbaV0uc3R5bGVEZWNsYXJhdGlvbi5nZXQoKTsKKyAgICAgICAgICAg
IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24gPSBtX21hdGNoZWREZWNsc1tpXS5z
dHlsZURlY2xhcmF0aW9uLmdldCgpOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlw
ZSA9IG1fbWF0Y2hlZERlY2xzW2ldLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQg
cmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KICAgICAgICAgICAgIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rOwpAQCAtMjcyMCw3ICsyNzIwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFBhZ2VSdWxlc0ZvcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gSWYgdGhl
IHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgotICAgICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7
CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwog
ICAgICAgICBpZiAoIWRlY2wgfHwgZGVjbC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24g
MTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIEVTbWFy
dE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIFVz
ZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07CiAKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKLWNs
YXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUGFnZVJ1bGU7CiBjbGFz
cyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIENTU1Byb3BlcnR5OwpAQCAtNzAsNiArNjksNyBA
QCBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUltYWdlOwogY2xh
c3MgU3R5bGVQZW5kaW5nSW1hZ2U7CitjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgU3R5
bGVTaGFkZXI7CiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CkBAIC0y
NTksNyArMjU5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQq
KTsKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9t
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Ci0gICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCk7CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCosIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoQWxsKTsKIAogICAgIHN0cnVjdCBNYXRjaFJhbmdlcyB7CiAgICAgICAgIE1h
dGNoUmFuZ2VzKCkgOiBmaXJzdFVBUnVsZSgtMSksIGxhc3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhv
clJ1bGUoLTEpLCBsYXN0QXV0aG9yUnVsZSgtMSksIGZpcnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNl
clJ1bGUoLTEpIHsgfQpAQCAtMjk0LDcgKzI5NCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUg
PGJvb2wgZmlyc3RQYXNzPgogICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpbXBvcnRh
bnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAg
ICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgotICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbihD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJp
dGVkT25seSk7CisgICAgdm9pZCBhcHBseURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBi
b29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpOwogCiAgICAgc3RhdGljIGJvb2wg
aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKTsKIApAQCAtMzc1LDcgKzM3NSw3IEBA
IHByaXZhdGU6CiAgICAgc3RydWN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uIHsKICAgICAgICAg
TWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24oKSA6IHBvc3NpYmx5UGFkZGVkTWVtYmVyKDApIHsgfQog
Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVEZWNsYXJh
dGlvbjsKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlRGVjbGFyYXRpb247
CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGU7CiAg
ICAgICAgICAgICAvLyBVc2VkIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIHplcm8taW5pdGlh
bGl6ZWQgc2luY2Ugd2UgY29tcHV0ZSB0aGUgaGFzaCBvdmVyIHRoZSBieXRlcyBvZiB0aGlzIG9i
amVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
Y3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBTdHJpbmcgV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NUZXh0KCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKQordm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGU6OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpCiB7
CiAgICAgQVNTRVJUKHN0eWxlLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSA9PSB0aGlzKTsKICAgICBt
X3N0eWxlID0gc3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lUnVsZS5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE5ICs1MywxOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdldEtleXMoVmVjdG9yPGZsb2F0PiYga2V5cykgY29uc3QgICB7IHBh
cnNlS2V5U3RyaW5nKG1fa2V5LCBrZXlzKTsgfQogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlID8gbV9zdHlsZS0+ZW5zdXJl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpIDogMDsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKyAgICBTdHlsZVByb3BlcnR5U2V0
KiBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCiBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHBhcnNlS2V5U3RyaW5nKGNvbnN0IFN0cmluZyYgcywgVmVjdG9y
PGZsb2F0PiYga2V5cyk7CiAKICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVl
dCogcGFyZW50KTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9z
dHlsZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9zdHlsZTsKICAgICBTdHJpbmcg
bV9rZXk7ICAgICAgICAvLyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBrZXlzCiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkocmV2aXNpb24gMTA2NjYwKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgV2ViS2l0Q1NTTWF0cml4Ojp+V2ViS2l0Q1NTTWF0cml4KCkKIAog
dm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlRGVjbGFyYXRpb24gPSBT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KHN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCBzdHJp
bmcsIHRydWUsIHRydWUpKSB7CiAgICAgICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3BlcmF0
aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5CiAgICAgICAgIC8vIHJlcXVpcmVzIHN0
eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCShy
ZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzSWQoKSBjb25zdDsKIAog
ICAgIC8vIEFuIGV4dGVuc2lvbiB0byBnZXQgcHJlc2VudGF0aW9uYWwgaW5mb3JtYXRpb24gZm9y
IGF0dHJpYnV0ZXMuCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBt
X2F0dHJpYnV0ZS0+ZGVjbCgpOyB9CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7
IHJldHVybiBtX2F0dHJpYnV0ZS0+ZGVjbCgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7
IH0KIAogICAgIHZvaWQgc2V0U3BlY2lmaWVkKGJvb2wgc3BlY2lmaWVkKSB7IG1fc3BlY2lmaWVk
ID0gc3BlY2lmaWVkOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgJKHJldmlzaW9uIDEw
NjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+
IGNsb25lKCkgY29uc3Q7CiAgICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRl
Y2woKSBjb25zdCB7IHJldHVybiBtX21hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uID8gbV9tYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi0+ZGVjbGFyYXRpb24oKSA6IDA7IH0KKyAgICBTdHlsZVBy
b3BlcnR5U2V0KiBkZWNsKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwZWRBdHRyaWJ1dGVEZWNsYXJh
dGlvbiA/IG1fbWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24tPmRlY2xhcmF0aW9uKCkgOiAwOyB9
CiAKICAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogbWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbihQYXNzUmVmUHRy
PENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uPiBkZWNsKSB7IG1fbWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb24gPSBkZWNsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDExICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZU1hcHBl
ZFByb3BlcnR5KFN0eWxlZEVsZW1lbnQqLCBpbnQgcHJvcGVydHlJZCk7CiAgICAgCi0gICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWNsYXJhdGlvbi5nZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWNsYXJhdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIENT
U01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkKLSAgICAgICAgOiBtX2RlY2xhcmF0aW9uKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKSkKKyAgICAgICAgOiBtX2RlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKQogICAgICAgICAsIG1fZW50cnlUeXBlKGVO
b25lKQogICAgICAgICAsIG1fYXR0ck5hbWUoYW55UU5hbWUoKSkKICAgICB7CkBAIC03MCw3ICs3
MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVkRWxl
bWVudCopOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlY2xh
cmF0aW9uOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2RlY2xhcmF0aW9uOwogICAg
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5IG1fZW50cnlUeXBlOwogICAgIFF1YWxpZmllZE5hbWUgbV9h
dHRyTmFtZTsKICAgICBBdG9taWNTdHJpbmcgbV9hdHRyVmFsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMSw3ICs4MTEsNyBAQCBQYXNzUmVmUHRyPEVk
aXRpbmdUZXh0PiBEb2N1bWVudDo6Y3JlYXRlCiAKIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKQogewotICAgIHJldHVy
biBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFN0eWxl
UHJvcGVydHlTZXQ6OmNyZWF0ZSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CiB9CiAK
IFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWROb2Rl
LCBib29sIGRlZXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gbV9pbmxpbmVTdHlsZURlY2w7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IG1faW5saW5lU3R5bGVEZWNsOwogICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05h
bWVzOwogICAgIEF0b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDEx
ICszMjEsMTEgQEAgYm9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IAogICAg
IHJldHVybiB0cnVlOwogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogTmFtZWROb2Rl
TWFwOjplbnN1cmVJbmxpbmVTdHlsZURlY2woKQorU3R5bGVQcm9wZXJ0eVNldCogTmFtZWROb2Rl
TWFwOjplbnN1cmVJbmxpbmVTdHlsZURlY2woKQogewogICAgIGlmICghYXR0cmlidXRlRGF0YSgp
LT5tX2lubGluZVN0eWxlRGVjbCkgewogICAgICAgICBBU1NFUlQobV9lbGVtZW50LT5pc1N0eWxl
ZEVsZW1lbnQoKSk7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wg
PSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlSW5saW5lKHN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpKTsKKyAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5tX2lu
bGluZVN0eWxlRGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZUlubGluZShzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSk7CiAgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+
bV9pbmxpbmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNpbmcobV9lbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkgJiYgIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgIH0K
ICAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTks
OCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSB7
IHJldHVybiAmbV9hdHRyaWJ1dGVEYXRhOyB9CiAgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiAmbV9hdHRyaWJ1dGVEYXRhOyB9CiAK
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGVEZWNsKCkgeyByZXR1
cm4gYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbC5nZXQoKTsgfQotICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHls
ZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCkt
Pm1faW5saW5lU3R5bGVEZWNsLmdldCgpOyB9CisgICAgU3R5bGVQcm9wZXJ0eVNldCogZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCk7CiAgICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0
eWxlQXR0cmlidXRlCiAgICAgQVNTRVJUKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQoKSk7CiAgICAg
c2V0SXNTdHlsZUF0dHJpYnV0ZVZhbGlkKCk7CiAgICAgc2V0SXNTeW5jaHJvbml6aW5nU3R5bGVB
dHRyaWJ1dGUoKTsKLSAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0
eWxlID0gaW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGlu
ZVN0eWxlID0gaW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KHRoaXMpLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0
KCkpOwogICAgIGNsZWFySXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsKIH0KQEAgLTQw
NSw3ICs0MDUsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wCiAg
ICAgaWYgKCFzb3VyY2UtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUgPSBlbnN1cmVJbmxpbmVT
dHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpOwogICAgIGlubGluZVN0eWxlLT5jb3B5UHJvcGVydGllc0Zyb20oKnNv
dXJjZS0+aW5saW5lU3R5bGVEZWNsKCkpOwogICAgIGlubGluZVN0eWxlLT5zZXRTdHJpY3RQYXJz
aW5nKHNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCktPnVzZVN0cmljdFBhcnNpbmcoKSk7CiAKQEAg
LTQxNyw3ICs0MTcsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9w
CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewotICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKKyAgICBpZiAoU3R5bGVQ
cm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgaW5s
aW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBnZXRN
YXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBBdHRyaWJ1dGUqKTsKICAg
ICBzdGF0aWMgdm9pZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5
LCBBdHRyaWJ1dGUqLCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiopOwogCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBhZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KICAg
ICB2b2lkIGludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCi0gICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZU1h
cCgpID8gYXR0cmlidXRlTWFwKCktPmlubGluZVN0eWxlRGVjbCgpIDogMDsgfQotICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBl
bnN1cmVBdHRyaWJ1dGVNYXAoKS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7IH0KLSAgICB2aXJ0
dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZFUlJJREUgeyByZXR1cm4gZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCk7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZURl
Y2woKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVNYXAoKSA/IGF0dHJpYnV0ZU1hcCgpLT5pbmxp
bmVTdHlsZURlY2woKSA6IDA7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVT
dHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVNYXAoKS0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7IH0KKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZF
UlJJREUgeyByZXR1cm4gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmVuc3VyZUNTU1N0eWxlRGVj
bGFyYXRpb24oKTsgfQogCiAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIH0KICAgICAgICAg
bGFzdFN0eWxlZE5vZGUgPSBub2RlOwogCi0gICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
KyAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsID0gZWxlbWVudC0+ZW5z
dXJlSW5saW5lU3R5bGVEZWNsKCk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRGb250U2l6ZSA9IGNv
bXB1dGVkRm9udFNpemUobm9kZSk7CiAgICAgICAgIGZsb2F0IGRlc2lyZWRGb250U2l6ZSA9IG1h
eChNaW5pbXVtRm9udFNpemUsIHN0YXJ0aW5nRm9udFNpemVzLmdldChub2RlKSArIHN0eWxlLT5m
b250U2l6ZURlbHRhKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5l
U3R5bGVEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpOwpAQCAt
NTExLDcgKzUxMSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUVtYmVkZGluZ1UK
ICAgICAgICAgICAgIC8vIG90aGVyIGF0dHJpYnV0ZXMsIGxpa2Ugd2UgKHNob3VsZCkgZG8gd2l0
aCBCIGFuZCBJIGVsZW1lbnRzLgogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBkaXJBdHRyKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxp
bmVTdHlsZURlY2woKS0+Y29weSgpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmNvcHko
KTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNv
ZGVCaWRpLCBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJp
YnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CkBAIC03MjUs
NyArNzI1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdz
IGlubGluZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0cyBjb250ZW50cy4KICAgICAgICAgICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5l
bnN1cmVJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNs
KCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZShzdHlsZS0+c3R5bGUo
KSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5s
aW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCk7CkBAIC04OTAsNyArODkwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6
cmVtb3ZlQ1NTU3R5bGUoRQogICAgIGlmICghc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxpbmVTdHls
ZU9mRWxlbWVudChlbGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgcHJvcGVydGllcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVT
dHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQq
IGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgQVNTRVJUKGlu
bGluZVN0eWxlKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBhIG1hc3MtcmVtb3ZhbCBm
dW5jdGlvbiBoZXJlIGJ1dCB3ZSBkb24ndCBoYXZlIGFuIHVuZG9hYmxlIG9uZSB5ZXQuCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgaSsrKQpAQCAtMTMxMCw3
ICsxMzEwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKTsKLSAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBi
bG9jay0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGRlY2wg
PSBibG9jay0+aW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+YXNU
ZXh0KCk7CiAgICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0KTsK
IH0KQEAgLTEzNzUsNyArMTM3NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWYKIAogICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAg
ICAgICAgIGlmIChzdHlsZUNvbnRhaW5lcikgewotICAgICAgICAgICAgaWYgKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBleGlzdGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0
eWxlRGVjbCgpKQorICAgICAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGV4aXN0aW5nU3R5
bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgICAgICAgICAg
c2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxl
LT5hc1RleHQoKSArIHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0
ciwgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6
OmNyZWF0ZURlbGV0CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjb250YWluZXIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKICAgICBjb250YWluZXIt
PnNldElkQXR0cmlidXRlKGNvbnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKIAotICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNvbnRhaW5lci0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBjb250YWluZXItPmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7CiAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVSZWFkT25seSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxMDY2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIGNvbnN0IGludCBlZGl0aW5nUHJvcGVydGll
c1tdID0gewogZW51bSBFZGl0aW5nUHJvcGVydGllc1R5cGUgeyBPbmx5SW5oZXJpdGFibGVFZGl0
aW5nUHJvcGVydGllcywgQWxsRWRpdGluZ1Byb3BlcnRpZXMgfTsKIAogdGVtcGxhdGUgPGNsYXNz
IFN0eWxlRGVjbGFyYXRpb25UeXBlPgotc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGNvcHlFZGl0aW5nUHJvcGVydGllcyhTdHlsZURlY2xhcmF0aW9uVHlwZSog
c3R5bGUsIEVkaXRpbmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGlu
Z1Byb3BlcnRpZXMpCitzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5RWRp
dGluZ1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUqIHN0eWxlLCBFZGl0aW5nUHJvcGVy
dGllc1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQogewogICAg
IGlmICh0eXBlID09IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUt
PmNvcHlQcm9wZXJ0aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgo
ZWRpdGluZ1Byb3BlcnRpZXMpKTsKQEAgLTk5LDE3ICs5OSwxOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNFZGl0aW5nUHJvcGVydHkoaW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlRnJvbUNv
bXB1dGVkU3R5bGUoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
LCBFZGl0aW5nUHJvcGVydGllc1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9w
ZXJ0aWVzKQorc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZWRpdGluZ1N0eWxl
RnJvbUNvbXB1dGVkU3R5bGUoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRp
bmdQcm9wZXJ0aWVzKQogewogICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBTdHlsZVByb3Bl
cnR5U2V0OjpjcmVhdGUoKTsKICAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxl
LmdldCgpLCB0eXBlKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gZ2V0UHJvcGVydGllc05vdEluKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlV2l0aFJl
ZHVuZGFudFByb3BlcnRpZXMsIENTU1N0eWxlRGVjbGFyYXRpb24qIGJhc2VTdHlsZSk7CitzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogYmFzZVN0eWxlKTsKIGVudW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVn
YWN5Rm9udFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9Owog
c3RhdGljIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCosIENTU1ByaW1p
dGl2ZVZhbHVlKiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgTGVnYWN5Rm9u
dFNpemVNb2RlKTsKK3N0YXRpYyBib29sIGlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKENTU1ZhbHVl
Kik7CiBzdGF0aWMgYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURl
Y2xhcmF0aW9uKik7CitzdGF0aWMgYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihT
dHlsZVByb3BlcnR5U2V0Kik7CiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3Vu
ZENvbG9ySW5FZmZlY3QoTm9kZSopOwogCiBjbGFzcyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpA
QCAtMTIyLDggKzEyNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEVxdWl2
YWxlbnQoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoKm1f
dGFnTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgc3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsgfQotICAgIHZpcnR1YWwgYm9v
bCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlz
UHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7CiAK
IHByb3RlY3RlZDoKQEAgLTE1NSw3ICsxNTcsNyBAQCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OkhU
TUxFbGVtZW50RXF1aXZhCiAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlICE9IENTU1ZhbHVlSW52
YWxpZCk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudElu
U3R5bGUoRWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KSBjb25zdAorYm9vbCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHls
ZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKIHsKICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9w
cm9wZXJ0eUlEKTsKICAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiB2YWx1ZSAmJiB2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUuZ2V0KCkpLT5nZXRJZGVudCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCk7
CkBAIC0xNzIsOCArMTc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50KHByaW1pdGl2ZVZhbHVlLCB0YWdO
YW1lKSk7CiAgICAgfQotICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoU3R5bGVQcm9wZXJ0
eVNldCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxl
bWVudCosIFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MVGV4
dERlY29yYXRpb25FcXVpdmFsZW50KGludCBwcmltaXRpdmVWYWx1ZSwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSk7CkBAIC0xODUsMTIgKzE4NywxMiBAQCBIVE1MVGV4dERlY29yYXRpb25F
cXVpdmFsZW50OjpIVE1MVGV4dERlCiB7CiB9CiAKLWJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1
aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVy
dHlFeGlzdHNJblN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdAogewogICAgIHJl
dHVybiBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uc0luRWZmZWN0KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uKTsKIH0KIAotYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50
Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAorYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFs
ZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0
eVNldCogc3R5bGUpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCk7CiAgICAgaWYgKCFzdHlsZVZhbHVlKQpAQCAtMjExLDcgKzIxMyw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtKSBjb25zdCB7IHJl
dHVybiBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxlbSkgJiYgZWxlbS0+aGFzQXR0
cmlidXRlKG1fYXR0ck5hbWUpOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0
eWxlKEVsZW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydHlT
ZXQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50KiwgRWRpdGlu
Z1N0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBhdHRyaWJ1
dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCopIGNvbnN0OwogICAgIGlubGluZSBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZTsgfQpA
QCAtMjM0LDcgKzIzNiw3IEBAIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjpIVE1MQXR0cmlidXRl
RXEKIHsKIH0KIAotYm9vbCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkgY29uc3QKK2Jvb2wgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5T
dHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKIHsK
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKGVs
ZW1lbnQpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CkBAIC0yNTYsOCArMjU4LDggQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gSFRNTEF0dHJpYnV0ZUVxdWl2YQogICAgIGlmICghZWxlbWVudC0+aGFzQXR0
cmlidXRlKG1fYXR0ck5hbWUpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGR1bW15U3R5bGU7Ci0gICAgZHVtbXlTdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gZHVtbXlTdHlsZTsKKyAgICBkdW1teVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKCk7CiAgICAgZHVtbXlTdHlsZS0+c2V0UHJvcGVydHkobV9wcm9wZXJ0eUlELCBl
bGVtZW50LT5nZXRBdHRyaWJ1dGUobV9hdHRyTmFtZSkpOwogICAgIHJldHVybiBkdW1teVN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CiB9CkBAIC0zMTIsNiArMzE0LDE0
IEBAIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW8KICAgICBpbml0KHBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCksIHByb3BlcnRpZXNUb0luY2x1ZGUpOwogfQogCitFZGl0
aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKKyAg
ICA6IG1fbXV0YWJsZVN0eWxlKHN0eWxlID8gc3R5bGUtPmNvcHkoKSA6IDApCisgICAgLCBtX3No
b3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZhbHNlKQorICAgICwgbV9mb250U2l6ZURlbHRh
KE5vRm9udERlbHRhKQoreworICAgIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7Cit9CisKIEVkaXRp
bmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQog
ICAgIDogbV9tdXRhYmxlU3R5bGUoc3R5bGUgPyBzdHlsZS0+Y29weSgpIDogMCkKICAgICAsIG1f
c2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCkBAIC0zNTEsNiArMzYxLDExIEBA
IHN0YXRpYyBpbmxpbmUgUkdCQTMyIGdldFJHQkFGb250Q29sb3IoQ1MKICAgICByZXR1cm4gY3Nz
VmFsdWVUb1JHQkEoc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0
eUNvbG9yKS5nZXQoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIGdldFJHQkFGb250Q29s
b3IoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCit7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JB
KHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKK30K
Kwogc3RhdGljIGlubGluZSBSR0JBMzIgcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUq
IG5vZGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGJhY2tncm91bmRDb2xvckluRWZm
ZWN0KG5vZGUpLmdldCgpKTsKQEAgLTM5Nyw3ICs0MTIsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvCiB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0UHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewogICAg
IGlmICghbV9tdXRhYmxlU3R5bGUpCi0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICBtX211dGFibGVTdHlsZSA9IFN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogCiAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3Bl
cnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOwogfQpAQCAtNDY5LDcgKzQ4NCw3IEBA
IGJvb2wgRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKFdyaXRpbmcKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkKK3ZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKQogewogICAgIG1fbXV0YWJsZVN0eWxl
ID0gc3R5bGU7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQg
d2hldGhlciBvciBub3QgZm9udCBpcyBmaXhlZCB3aWR0aCBmb3IgbXV0YWJsZSBzdHlsZS4KQEAg
LTQ3OCwxMiArNDkzLDEyIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRy
PEMKICAgICBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6
b3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQordm9pZCBFZGl0aW5nU3R5bGU6Om92ZXJyaWRlV2l0aFN0eWxlKGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHN0eWxlKQogewogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCi0gICAgICAgIG1fbXV0YWJs
ZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICBt
X211dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIG1fbXV0YWJs
ZVN0eWxlLT5tZXJnZShzdHlsZSk7CiAgICAgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKIH0KQEAg
LTUyMCw3ICs1MzUsNyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpl
CiBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3Zl
VGV4dERpcmVjdGlvbigpCiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdGV4dERpcmVjdGlv
biA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdGV4dERpcmVjdGlvbi0+bV9tdXRhYmxl
U3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgdGV4dERp
cmVjdGlvbi0+bV9tdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAg
ICB0ZXh0RGlyZWN0aW9uLT5tX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlV
bmljb2RlQmlkaSwgQ1NTVmFsdWVFbWJlZCwgbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5SXNJbXBv
cnRhbnQoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSkpOwogICAgIHRleHREaXJlY3Rpb24tPm1fbXV0
YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgbV9tdXRhYmxlU3R5
bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pLAogICAgICAgICBtX211
dGFibGVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwpA
QCAtNTQzLDEwICs1NTgsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRC
eU5vZAogewogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHls
ZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFy
ZW50Tm9kZSgpKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5
bGUoY29tcHV0ZWRTdHlsZShub2RlKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIG5vZGVT
dHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0KCkpOwotICAg
IG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhub2RlU3R5bGUuZ2V0
KCkpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdT
dHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwg
QWxsRWRpdGluZ1Byb3BlcnRpZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBub2Rl
U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUp
LCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CisgICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50
UHJvcGVydGllcyhwYXJlbnRTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKTsKKyAg
ICBtX211dGFibGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMobm9kZVN0eWxlLT5l
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpOwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVt
b3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQpAQCAtNTU0LDkg
KzU2OSw5IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW4KICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFy
ZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5v
ZGUtPnBhcmVudE5vZGUoKSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21w
dXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAg
ICBub2RlU3R5bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgp
KTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5
bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSksIEFs
bEVkaXRpbmdQcm9wZXJ0aWVzKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbm9kZVN0
eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSwg
QWxsRWRpdGluZ1Byb3BlcnRpZXMpOworICAgIG5vZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFBy
b3BlcnRpZXMocGFyZW50U3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7CiAKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gbm9kZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkKQEAgLTU5OCwx
MiArNjEzLDEyIEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEUKIHsK
ICAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVy
biBGYWxzZVRyaVN0YXRlOwotICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoc3R5bGUtPm1fbXV0
YWJsZVN0eWxlLmdldCgpLCBEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CisgICAgcmV0
dXJuIHRyaVN0YXRlT2ZTdHlsZShzdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxl
RGVjbGFyYXRpb24oKSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiBUcmlT
dGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9y
ZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGRpZmZlcmVuY2UgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5
bGUuZ2V0KCksIHN0eWxlVG9Db21wYXJlKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
ZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5
bGVUb0NvbXBhcmUpOwogCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9
PSBJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVBy
b3BlcnRpZXNJblNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9u
bHlQcm9wZXJ0aWVzKSk7CkBAIC02NDgsNyArNjYzLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmNv
bmZsaWN0c1dpdGhJbmxpbmVTdAogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBBU1NFUlQoIWNv
bmZsaWN0aW5nUHJvcGVydGllcyB8fCBjb25mbGljdGluZ1Byb3BlcnRpZXMtPmlzRW1wdHkoKSk7
CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUgPSBlbGVtZW50
LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9
IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwg
IWlubGluZVN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTgzNSw3ICs4NTAsNyBA
QCBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9yCiAgICAgICAgIG1hdGNo
ZWRBdHRyaWJ1dGVzKys7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKEhUTUxOYW1l
czo6c3R5bGVBdHRyKSkgewotICAgICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKKyAgICAgICAgaWYgKFN0eWxl
UHJvcGVydHlTZXQqIHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZS0+cHJvcGVydHlDb3VudCgpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewogICAgICAgICAgICAgICAgIGlmICghaXNFZGl0aW5nUHJvcGVydHkoc3R5bGUtPnByb3BlcnR5
QXQoaSkuaWQoKSkpCkBAIC05MTQsNyArOTI5LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdl
SW5saW5lU3R5bGVPZkVsZQogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNB
bmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFs
ZW50KiBlcXVpdmFsZW50LCBjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVtZW50LAotICAgIEVkaXRp
bmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQorICAgIEVkaXRpbmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1v
ZGUgbW9kZSwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGVxdWl2YWxl
bnQtPm1hdGNoZXMoZWxlbWVudCkgJiYgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHls
ZShlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgJiYgKG1vZGUgPT0gRWRpdGlu
Z1N0eWxlOjpPdmVycmlkZVZhbHVlcyB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0
eWxlKHN0eWxlKSk7CkBAIC05ODIsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgbWVyZ2VUZXh0RGVj
b3JhdGlvblZhbHVlcyhDUwogICAgICAgICBtZXJnZWRWYWx1ZS0+YXBwZW5kKGxpbmVUaHJvdWdo
LmdldCgpKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlKQordm9p
ZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1By
b3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTAxMSwxNCArMTAyNiwxNCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHls
ZShDU1NNdXRhYmxlCiAgICAgfQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK3N0YXRpYyBQYXNzUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5
U2V0OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IGVs
ZW1lbnQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVSdWxlc0ZvckVsZW1lbnQo
ZWxlbWVudCwgcnVsZXNUb0luY2x1ZGUpOwogICAgIGlmIChtYXRjaGVkUnVsZXMpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7IGkrKykg
ewogICAgICAgICAgICAgaWYgKG1hdGNoZWRSdWxlcy0+aXRlbShpKS0+dHlwZSgpID09IENTU1J1
bGU6OlNUWUxFX1JVTEUpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHMgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihtYXRjaGVkUnVsZXMt
Pml0ZW0oaSkpLT5kZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBzID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4obWF0Y2hlZFJ1bGVzLT5p
dGVtKGkpKS0+ZGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+bWVyZ2Uocy5n
ZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMjksNyArMTA0NCw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmEKIAogdm9pZCBFZGl0
aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRS
dWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwKKyAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50LAogICAgICAgICBDU1NTdHlsZVNlbGVjdG9yOjpB
dXRob3JDU1NSdWxlcyB8IENTU1N0eWxlU2VsZWN0b3I6OkNyb3NzT3JpZ2luQ1NTUnVsZXMpOwog
ICAgIC8vIFN0eWxlcyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQgaW4g
dGhlIHZhcmlhYmxlICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKICAgICAvLyBvdmVyIHRob3Nl
IGZyb20gbWF0Y2hlZCBydWxlcy4KQEAgLTEwNDgsNyArMTA2Myw3IEBAIHZvaWQgRWRpdGluZ1N0
eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm8KICAgICAvLyBGb3IgZXhhbXBsZTogc3R5bGU9Imhl
aWdodDogMSU7IG92ZXJmbG93OiB2aXNpYmxlOyIgaW4gcXVpcmtzbW9kZQogICAgIC8vIEZJWE1F
OiBUaGVyZSBhcmUgb3RoZXJzIGxpa2UgdGhpcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81MTk1MTIz
PiBTbGFzaGRvdCBjb3B5L3Bhc3RlIGZpZGVsaXR5IHByb2JsZW0KICAgICBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlRm9yRWxlbWVudCA9IGNvbXB1dGVk
U3R5bGUoZWxlbWVudCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBm
cm9tQ29tcHV0ZWRTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZnJvbUNvbXB1dGVkU3R5bGUgPSBTdHlsZVBy
b3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291
bnQgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CkBAIC0xMDY1LDcgKzEwODAsNyBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvCiAgICAgbV9tdXRhYmxl
U3R5bGUtPm1lcmdlKGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVtb3ZlUHJvcGVydGllc0luU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
VG9SZW1vdmVQcm9wZXJ0aWVzRnJvbSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQorc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCog
c3R5bGVUb1JlbW92ZVByb3BlcnRpZXNGcm9tLCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKIHsK
ICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGUtPnByb3BlcnR5Q291bnQoKTsKICAg
ICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmUocHJvcGVydHlDb3VudCk7CkBAIC0xMDgy
LDkgKzEwOTcsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIDEuIFJlbW92ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVs
ZXMgYmVjYXVzZSBzdHlsZSByZW1haW4gd2l0aG91dCByZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0
eWxlIGRlY2xhcmF0aW9uCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVs
ZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRj
aGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbEJ1dEVtcHR5
Q1NTUnVsZXMpOwogICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1h
dGNoZWRSdWxlcy0+aXNFbXB0eSgpKQotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3Bl
cnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdl
dCgpKTsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRh
YmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+ZW5zdXJlQ1NTU3R5bGVEZWNs
YXJhdGlvbigpKTsKIAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQg
YW5kIG5vdCBvdmVycmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjb21wdXRlZFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoY29udGV4dCwgRWRpdGlu
Z1Byb3BlcnRpZXNJbkVmZmVjdCk7CkBAIC0xMDkzLDcgKzExMDgsNyBAQCB2b2lkIEVkaXRpbmdT
dHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAgICAgICAgICAgICBjb21wdXRlZFN0eWxlLT5t
X211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENT
U1ZhbHVlVHJhbnNwYXJlbnQpOwogCiAgICAgICAgIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKGNv
bXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZUZyb21NYXRjaGVkUnVsZXMu
Z2V0KCkpOwotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211
dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpOwor
ICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHls
ZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVj
bGFyYXRpb24oKSk7CiAgICAgfQogCiAgICAgLy8gMy4gSWYgdGhpcyBlbGVtZW50IGlzIGEgc3Bh
biBhbmQgaGFzIGRpc3BsYXk6IGlubGluZSBvciBmbG9hdDogbm9uZSwgcmVtb3ZlIHRoZW0gdW5s
ZXNzIHRoZXkgYXJlIG92ZXJyaWRlbiBieSBydWxlcy4KQEAgLTExMTEsNyArMTEyNiw3IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGUKICAgICBpZiAoIW1fbXV0YWJs
ZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gc3R5
bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBDU1NTdHlsZVNlbGVjdG9yOjpV
QUFuZFVzZXJDU1NSdWxlcyk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGRlZmF1bHRT
dHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVT
ZWxlY3Rvcjo6VUFBbmRVc2VyQ1NTUnVsZXMpOwogCiAgICAgcmVtb3ZlUHJvcGVydGllc0luU3R5
bGUobV9tdXRhYmxlU3R5bGUuZ2V0KCksIGRlZmF1bHRTdHlsZS5nZXQoKSk7CiB9CkBAIC0xMTE5
LDcgKzExMzQsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlCiB2
b2lkIEVkaXRpbmdTdHlsZTo6Zm9yY2VJbmxpbmUoKQogewogICAgIGlmICghbV9tdXRhYmxlU3R5
bGUpCi0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZSgpOworICAgICAgICBtX211dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZSgpOwogICAgIGNvbnN0IGJvb2wgcHJvcGVydHlJc0ltcG9ydGFudCA9IHRydWU7CiAgICAg
bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVJ
bmxpbmUsIHByb3BlcnR5SXNJbXBvcnRhbnQpOwogfQpAQCAtMTE2OCw3ICsxMTgzLDcgQEAgUGFz
c1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6cwogICAgIHJldHVybiBzdHlsZTsK
IH0KIAotc3RhdGljIHZvaWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3N0YXRpYyB2b2lkIHJlY29uY2lsZVRleHRE
ZWNvcmF0aW9uUHJvcGVydGllcyhTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKIHsgICAgCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKQEAgLTExOTksNyArMTIxNCw3IEBA
IFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKIAogICAgIFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBwb3NpdGlvbi5jb21w
dXRlZFN0eWxlKCk7CiAgICAgLy8gRklYTUU6IHRha2UgY2FyZSBvZiBiYWNrZ3JvdW5kLWNvbG9y
IGluIGVmZmVjdAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbXV0YWJs
ZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxl
LmdldCgpKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbXV0YWJsZVN0eWxlID0gZ2V0
UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlLmdldCgpKTsKIAog
ICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkp
OwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRTdHlsZVdpdGhD
U1MoKSkKQEAgLTEyMTgsNyArMTIzMyw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0
aW5nU3R5bGUqIHMKICAgICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJp
cFdoaXRlU3BhY2UoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0
eShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCog
bmV3VGV4dERlY29yYXRpb24sIGludCBwcm9wZXJ0eUlEKQorc3RhdGljIHZvaWQgc2V0VGV4dERl
Y29yYXRpb25Qcm9wZXJ0eShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVM
aXN0KiBuZXdUZXh0RGVjb3JhdGlvbiwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKG5ld1Rl
eHREZWNvcmF0aW9uLT5sZW5ndGgoKSkKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIG5ld1RleHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5wcm9wZXJ0eUlzSW1w
b3J0YW50KHByb3BlcnR5SUQpKTsKQEAgLTEyMjksNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIHNl
dFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1MKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVDaGFuZ2U6
OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKQordm9p
ZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkK
IHsKICAgICBBU1NFUlQoc3R5bGUpOwogCkBAIC0xMjkyLDcgKzEzMDcsNyBAQCB2b2lkIFN0eWxl
Q2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBk
aWZmVGV4dERlY29yYXRpb25zKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50
IHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQgZGlm
ZlRleHREZWNvcmF0aW9ucyhTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgaW50IHByb3BlcnRJRCwg
Q1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4
dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOwogICAg
IGlmICghdGV4dERlY29yYXRpb24gfHwgIXRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpIHx8
ICFyZWZUZXh0RGVjb3JhdGlvbiB8fCAhcmVmVGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkp
CkBAIC0xMzA3LDExICsxMzIyLDggQEAgc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhD
U1NNdXRhYgogICAgIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoc3R5bGUsIG5ld1RleHREZWNv
cmF0aW9uLmdldCgpLCBwcm9wZXJ0SUQpOwogfQogCi1zdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNC
b2xkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorc3RhdGljIGJvb2wgZm9udFdlaWdodElz
Qm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKIHsKLSAgICBBU1NFUlQoc3R5bGUpOwotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50
ZXJuYWwoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKLQogICAgIGlmICghZm9udFdlaWdodCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZm9udFdlaWdodC0+aXNQcmltaXRpdmVWYWx1
ZSgpKQpAQCAtMTMxOSw3ICsxMzMxLDcgQEAgc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChD
U1NTdHlsZURlYwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRo
ZXJlIGFyZSBvbmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQu
CiAgICAgLy8gQ29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNl
IHR3byBzdGF0ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZvbnRXZWlnaHQuZ2V0KCkpLT5nZXRJZGVudCgpKSB7Cisg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZvbnRXZWlnaHQpLT5n
ZXRJZGVudCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWUyMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUzMDA6CkBAIC0xMzM2LDEzICsxMzQ4LDI2
IEBAIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWMKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRm9yIENTU1ZhbHVlQm9sZGVyIGFuZCBDU1NWYWx1
ZUxpZ2h0ZXIKLSAgICByZXR1cm4gZmFsc2U7IC8vIE1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0VGV4dEFsaWdubWVudChDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSkKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENT
U1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAgcmV0dXJuIGZvbnRXZWlnaHRJc0JvbGQoZm9udFdl
aWdodC5nZXQoKSk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUpCiB7Ci0gICAgaW50IHRleHRBbGlnbiA9IGdldElkZW50aWZpZXJWYWx1
ZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pOwotICAgIHN3aXRjaCAodGV4dEFsaWduKSB7
CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgIHJl
dHVybiBmb250V2VpZ2h0SXNCb2xkKGZvbnRXZWlnaHQuZ2V0KCkpOworfQorCitzdGF0aWMgaW50
IGdldFRleHRBbGlnbm1lbnQoaW50IHRleHRBbGlnbklkZW50aWZpZXJWYWx1ZSkKK3sKKyAgICBz
d2l0Y2ggKHRleHRBbGlnbklkZW50aWZpZXJWYWx1ZSkgewogICAgIGNhc2UgQ1NTVmFsdWVDZW50
ZXI6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENlbnRlcjoKICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlQ2VudGVyOwpAQCAtMTM1OCwxMSArMTM4MywyMSBAQCBzdGF0aWMgaW50IGdldFRleHRBbGln
bm1lbnQoQ1NTU3R5bGVEZWNsCiAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxpZDsKIH0KIAotUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0aWVzTm90SW4oQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogYmFzZVN0eWxlKQorc3RhdGljIGludCBnZXRUZXh0QWxpZ25tZW50KENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIHJldHVybiBnZXRUZXh0QWxpZ25tZW50KGdldElk
ZW50aWZpZXJWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pKTsKK30KKworc3RhdGlj
IGludCBnZXRUZXh0QWxpZ25tZW50KFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQoreworICAgIHJl
dHVybiBnZXRUZXh0QWxpZ25tZW50KGdldElkZW50aWZpZXJWYWx1ZShzdHlsZSwgQ1NTUHJvcGVy
dHlUZXh0QWxpZ24pKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBnZXRQcm9w
ZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGll
cywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0eWxlKQogewogICAgIEFTU0VSVChzdHlsZVdp
dGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKICAgICBBU1NFUlQoYmFzZVN0eWxlKTsKLSAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJlc3VsdCA9IHN0eWxlV2l0aFJlZHVuZGFu
dFByb3BlcnRpZXMtPmNvcHkoKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcmVzdWx0
ID0gc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcy0+Y29weSgpOwogCiAgICAgcmVzdWx0LT5y
ZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhiYXNlU3R5bGUpOwogCkBAIC0xMzgyLDE1ICsxNDE3
LDIzIEBAIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHIKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1pbnQgZ2V0SWRlbnRpZmllclZhbHVlKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitpbnQgZ2V0SWRlbnRpZmllclZh
bHVlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7
CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIGlm
ICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgp
KS0+Z2V0SWRlbnQoKTsKK30KIAoraW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIGlmICghc3R5
bGUpCisgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SUQpOwogICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybiAwOwotCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5n
ZXRJZGVudCgpOwogfQogCkBAIC0xNDE4LDIyICsxNDYxLDMwIEBAIGludCBsZWdhY3lGb250U2l6
ZUZyb21DU1NWYWx1ZShEb2N1bWVudCoKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBoYXNUcmFu
c3BhcmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK2Jvb2wg
aXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqIGNzc1ZhbHVlKQogewotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFs
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoIWNzc1ZhbHVlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIGlmICgh
Y3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oY3NzVmFsdWUuZ2V0KCkpOwotICAgIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3NzVmFsdWUpOyAgICAKICAgICBpZiAo
dmFsdWUtPmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUt
PmdldFJHQkEzMlZhbHVlKCkpOwotICAgIAorICAgICAgICByZXR1cm4gIWFscGhhQ2hhbm5lbCh2
YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7ICAgIAogICAgIHJldHVybiB2YWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQogCitib29sIGhhc1RyYW5zcGFyZW50QmFja2dy
b3VuZENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NW
YWx1ZT4gY3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICByZXR1cm4gaXNUcmFuc3BhcmVudENvbG9yVmFs
dWUoY3NzVmFsdWUuZ2V0KCkpOworfQorICAgIAorYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91
bmRDb2xvcihTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
IGNzc1ZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpOworICAgIHJldHVybiBpc1RyYW5zcGFyZW50Q29sb3JWYWx1ZShjc3NWYWx1ZS5n
ZXQoKSk7Cit9CisKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGJhY2tncm91bmRDb2xvckluRWZmZWN0
KE5vZGUqIG5vZGUpCiB7CiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9y
OyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFz
cyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjsKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBEb2N1bWVudDsKQEAgLTUzLDYgKzUyLDcgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFBvc2l0aW9u
OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgU3R5bGVQ
cm9wZXJ0eVNldDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwogCkBAIC04MSw2ICs4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRWRpdGluZ1N0eWxlKHBvc2l0aW9uLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKSk7CiAgICAgfQog
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVk
aXRpbmdTdHlsZShzdHlsZSkpOworICAgIH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRp
bmdTdHlsZT4gY3JlYXRlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUoc3R5bGUpKTsKQEAgLTkz
LDExICs5OCwxMSBAQCBwdWJsaWM6CiAKICAgICB+RWRpdGluZ1N0eWxlKCk7CiAKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBtX211dGFibGVTdHlsZS5n
ZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKCkgeyByZXR1cm4gbV9tdXRhYmxl
U3R5bGUuZ2V0KCk7IH0KICAgICBib29sIHRleHREaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiYp
IGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3R5bGUoUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pOwotICAgIHZvaWQgb3ZlcnJpZGVX
aXRoU3R5bGUoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHNl
dFN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOworICAgIHZvaWQgb3ZlcnJpZGVX
aXRoU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOwogICAgIHZvaWQgY2xlYXIoKTsKICAg
ICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8
RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0xNDQs
NiArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoKTsKICAgICBFZGl0aW5nU3R5
bGUoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwogICAgIEVkaXRpbmdTdHlsZShjb25zdCBQ
b3NpdGlvbiYsIFByb3BlcnRpZXNUb0luY2x1ZGUpOworICAgIEVkaXRpbmdTdHlsZShjb25zdCBT
dHlsZVByb3BlcnR5U2V0Kik7CiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFy
YXRpb24qKTsKICAgICBFZGl0aW5nU3R5bGUoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CkBAIC0x
NTQsOSArMTYwLDkgQEAgcHJpdmF0ZToKICAgICBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJv
cGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1l
bnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxD
U1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdDsKICAgICB2b2lkIG1l
cmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJv
cGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgbWVyZ2VT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2Rl
KTsKKyAgICB2b2lkIG1lcmdlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5T3Zl
cnJpZGVNb2RlKTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9t
dXRhYmxlU3R5bGU7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fbXV0YWJsZVN0eWxl
OwogICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKICAgICBmbG9hdCBt
X2ZvbnRTaXplRGVsdGE7CiAKQEAgLTIwMSw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgZXh0cmFj
dFRleHRTdHlsZXMoRG9jdW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wg
c2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRleHRTdHls
ZXMoRG9jdW1lbnQqLCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnRE
ZWZhdWx0U2l6ZSk7CiAKICAgICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBib29sIG1fYXBwbHlC
b2xkOwpAQCAtMjE3LDYgKzIyMyw3IEBAIHByaXZhdGU6CiAKIC8vIEZJWE1FOiBSZW1vdmUgdGhl
c2UgZnVuY3Rpb25zIG9yIG1ha2UgdGhlbSBub24tZ2xvYmFsIHRvIGRpc2NvdXJhZ2UgdXNpbmcg
Q1NTU3R5bGVEZWNsYXJhdGlvbiBkaXJlY3RseS4KIGludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIENTU1Byb3BlcnR5SUQpOworaW50IGdldElkZW50aWZpZXJWYWx1
ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTA2NjYw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQ2LDkgKzEzNDYsOSBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24o
V3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwg
ZGlyZWN0aW9uID09IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA/ICJsdHIiIDogZGlyZWN0
aW9uID09IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbiA/ICJydGwiIDogImluaGVyaXQiLCBm
YWxzZSk7Ci0gICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLmdldCgpLCBF
ZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CisgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRv
U2VsZWN0aW9uKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIEVkaXRBY3Rpb25T
ZXRXcml0aW5nRGlyZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9u
KCkKQEAgLTI3NDUsNyArMjc0NSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRv
RWxlbWVudCgKICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwogICAgIGlm
ICghZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3Jk
V3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNlKTsKICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZh
bHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2
aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTYgKzk4LDE2IEBAIHN0YXRpYyBGcmFtZSogdGFyZ2V0
RnJhbWUoRnJhbWUqIGZyYW1lLCAKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKIH0KIAotc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShGcmFtZSogZnJhbWUsIEVk
aXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShG
cmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlv
biwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNh
bGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdv
b2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21t
YW5kRnJvbU1lbnVPcktleUJpbmRpbmc6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlT
dHlsZVRvU2VsZWN0aW9uKHN0eWxlLCBhY3Rpb24pOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PmFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigp
LCBhY3Rpb24pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9N
OgogICAgIGNhc2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZToKLSAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKHN0eWxlKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5hcHBseVN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTYs
MTQgKzExNiwxNCBAQCBzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lKiBmCiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUp
OwogICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwg
c3R5bGUuZ2V0KCkpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFtZSog
ZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50
IHByb3BlcnR5SUQsIGludCBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0
eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3Bl
cnR5VmFsdWUpOwogICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2Us
IGFjdGlvbiwgc3R5bGUuZ2V0KCkpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChGcmEKICAgICAgICAgbmV3U3R5bGUgPSB2YWx1ZS0+
Y3NzVGV4dCgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBoYXZpbmcgdG8gY29u
dmVydCBuZXcgc3R5bGUgaW50byB0ZXh0LiAgV2Ugc2hvdWxkIGhhdmUgc2V0UHJvcGVydHlDU1NW
YWx1ZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld011dGFibGVT
dHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gbmV3TXV0YWJsZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCk7CiAgICAgbmV3TXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdT
dHlsZSwgZWMpOwogICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2Us
IGFjdGlvbiwgbmV3TXV0YWJsZVN0eWxlLmdldCgpKTsKIH0KQEAgLTE3NCwxNiArMTc0LDE2IEBA
IHN0YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZShGcmFtZSogZnIKIAogc3RhdGljIGJvb2wg
ZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5VmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CiAg
ICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3Vy
Y2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAo
c291cmNlKSB7CiAgICAgY2FzZSBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmc6Ci0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLmdl
dCgpLCBhY3Rpb24pOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5UGFyYWdyYXBoU3R5
bGVUb1NlbGVjdGlvbihzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBhY3Rpb24p
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NOgogICAgIGNh
c2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZToKLSAgICAgICAgZnJhbWUtPmVkaXRv
cigpLT5hcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5hcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0
aW9uKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC01ODAsMjcgKzU4MCwyNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSnVzdGlmeVJp
Z2h0KEZyYW1lKiBmCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25MZWZ0VG9SaWdodChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwog
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVt
YmVkKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1Zh
bHVlTHRyKTsKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVk
aXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5
U3R5bGUoc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgRWRpdEFjdGlvblNldFdy
aXRpbmdEaXJlY3Rpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVu
aWNvZGVCaWRpLCBDU1NWYWx1ZU5vcm1hbCk7Ci0gICAgZnJhbWUtPmVkaXRvcigpLT5hcHBseVN0
eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CisgICAgZnJh
bWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKHN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0
KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
KQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1iZWQpOwogICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwpOwotICAg
IGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgRWRpdEFjdGlvblNldFdy
aXRpbmdEaXJlY3Rpb24pOworICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS0+
ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlv
bik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNyw3ICsxODM3
LDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldAogI2VuZGlmCiB9
CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEZyYW1lU2VsZWN0aW9u
Ojpjb3B5VHlwaW5nU3R5bGUoKSBjb25zdAorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBG
cmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fdHlw
aW5nU3R5bGUgfHwgIW1fdHlwaW5nU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTA2
NjYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q2hhcmFjdGVyRGF0YTsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3Mg
RnJhbWU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgU2V0dGluZ3M7Citj
bGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBlbnVtIEVV
c2VyVHJpZ2dlcmVkIHsgTm90VXNlclRyaWdnZXJlZCA9IDAsIFVzZXJUcmlnZ2VyZWQgPSAxIH07
CkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlw
UmVjdCkgY29uc3Q7CiAKICAgICBFZGl0aW5nU3R5bGUqIHR5cGluZ1N0eWxlKCkgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVR5cGluZ1N0eWxl
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5VHlwaW5nU3R5
bGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPik7CiAgICAgdm9pZCBjbGVhclR5cGluZ1N0eWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAJKHJldmlz
aW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlCiAKIHZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21t
YW5kOjpkb0FwcGx5KCkKIHsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUg
PSBtX2VsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlID0gbV9lbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAgICBtX29sZFZhbHVlID0gc3R5
bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0eSk7CiAgICAgbV9pbXBvcnRhbnQgPSBzdHls
ZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3Byb3BlcnR5KTsKICAgICBzdHlsZS0+cmVtb3ZlUHJv
cGVydHkobV9wcm9wZXJ0eSk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgUmVtb3ZlQ1NTUHJvcGVy
dHlDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRv
VW5hcHBseSgpCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gbV9l
bGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9
IG1fZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KG1f
cHJvcGVydHksIG1fb2xkVmFsdWUsIG1faW1wb3J0YW50KTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogCiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZS5nZXQoKSk7CiAKLSAgICAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5s
aW5lU3R5bGVEZWNsKCk7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0g
ZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5saW5lU3R5bGUpOwogICAg
ICAgICBpZiAoaW5saW5lU3R5bGUpIHsKICAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRl
eHQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNs
YXNzIEVkaXRpbmdTdHlsZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZXBsYWNlbWVudEZyYWdtZW50
OworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIAogY2xhc3MgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGJv
b2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIGludCBwcm9wZXJ0eUlEKTsKK3N0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxU
b05vbmUoU3R5bGVQcm9wZXJ0eVNldCosIGludCBwcm9wZXJ0eUlEKTsKIAogY2xhc3MgQXR0cmli
dXRlQ2hhbmdlIHsKIHB1YmxpYzoKQEAgLTEyOSwxMSArMTI5LDExIEBAIHB1YmxpYzoKICAgICBO
b2RlKiBzZXJpYWxpemVOb2RlcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwogICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nKHMpOyB9CiAgICAgdm9pZCB3cmFwV2l0aE5vZGUo
Tm9kZSosIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2Vs
ZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVO
b2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sg
PSBmYWxzZSk7CisgICAgdm9pZCB3cmFwV2l0aFN0eWxlTm9kZShTdHlsZVByb3BlcnR5U2V0Kiwg
RG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgU3RyaW5nIHRha2VSZXN1bHRz
KCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1
aWxkZXImLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIERvY3VtZW50KiwgYm9vbCBpc0Js
b2NrID0gZmFsc2UpOworICAgIHZvaWQgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWls
ZGVyJiwgU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50KiwgYm9vbCBpc0Jsb2NrID0gZmFsc2Up
OwogICAgIGNvbnN0IFN0cmluZyBzdHlsZU5vZGVDbG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxz
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0
Kik7CiAgICAgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsK
QEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0
aE5vCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWls
ZGVyIG9wZW5UYWc7CiAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwg
ZG9jdW1lbnQsIGlzQmxvY2spOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OndyYXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VU
YWcoaXNCbG9jaykpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRl
ciYgb3V0LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGlzQmxvY2spCiB7CiAgICAgLy8gd3JhcHBpbmdTdHlsZUZvclNlcmlhbGl6YXRpb24gc2hvdWxk
IGhhdmUgcmVtb3ZlZCAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0CiAgICAgQVNT
RVJUKHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBzdGF0aWMgaW5s
aW5lIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1CiAgICAgcmV0dXJuIGFuY2VzdG9yVG9SZXRh
aW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlRm9yQmxvY2soY29tbW9uQW5jZXN0b3JCbG9jayk7CiB9
CiAKLXN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBpbnQgcHJvcGVydHlJRCkKK3N0YXRpYyBib29sIHByb3Bl
cnR5TWlzc2luZ09yRXF1YWxUb05vbmUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIGludCBwcm9w
ZXJ0eUlEKQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
KCkKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVu
dE5vZGUoKTsKICAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCShyZXZpc2lvbiAx
MDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKSBPVkVSUklERTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUo
KQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRp
dGlvbmFsQXR0cmlidXRlU3R5bGUoKQogewogICAgIGlmICghaGFzTG9jYWxOYW1lKGNvbGdyb3Vw
VGFnKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNvbEVsZW1lbnQuaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVDb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGUoKSBPVkVSUklERTsKIAogICAgIGludCBtX3NwYW47CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NDUsOSArNDQ1LDkgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYgogICAgIH0KIH0KIAotc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBs
ZWFrQm9yZGVyU3R5bGUoaW50IHZhbHVlKQorc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIGxlYWtC
b3JkZXJTdHlsZShpbnQgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwg
dmFsdWUpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0
eWxlLCB2YWx1ZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFN0eWxlLCB2YWx1ZSk7CkBAIC00NTUsMTYgKzQ1NSwxNiBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGxlYWtCCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKS5sZWFrUmVm
KCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEhUTUxUYWJs
ZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpCitQYXNzUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpCiB7
CiAgICAgaWYgKCghbV9ib3JkZXJBdHRyICYmICFtX2JvcmRlckNvbG9yQXR0cikgfHwgbV9mcmFt
ZUF0dHIpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKG1fYm9yZGVyQ29sb3JBdHRyKSB7
Ci0gICAgICAgIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc29saWRCb3JkZXJT
dHlsZSA9IGxlYWtCb3JkZXJTdHlsZShDU1NWYWx1ZVNvbGlkKTsKKyAgICAgICAgc3RhdGljIFN0
eWxlUHJvcGVydHlTZXQqIHNvbGlkQm9yZGVyU3R5bGUgPSBsZWFrQm9yZGVyU3R5bGUoQ1NTVmFs
dWVTb2xpZCk7CiAgICAgICAgIHJldHVybiBzb2xpZEJvcmRlclN0eWxlOwogICAgIH0KLSAgICBz
dGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIG91dHNldEJvcmRlclN0eWxlID0gbGVh
a0JvcmRlclN0eWxlKENTU1ZhbHVlT3V0c2V0KTsKKyAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNl
dCogb3V0c2V0Qm9yZGVyU3R5bGUgPSBsZWFrQm9yZGVyU3R5bGUoQ1NTVmFsdWVPdXRzZXQpOwog
ICAgIHJldHVybiBvdXRzZXRCb3JkZXJTdHlsZTsKIH0KIApAQCAtNDkxLDkgKzQ5MSw5IEBAIEhU
TUxUYWJsZUVsZW1lbnQ6OkNlbGxCb3JkZXJzIEhUTUxUYWJsZUUKICAgICByZXR1cm4gTm9Cb3Jk
ZXJzOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBIVE1MVGFi
bGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQorUGFzc1JlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQogewotICAg
IFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0
eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAKICAgICBzd2l0Y2ggKGNlbGxCb3Jk
ZXJzKCkpIHsKICAgICBjYXNlIFNvbGlkQm9yZGVyc0NvbHNPbmx5OgpAQCAtNTQyLDE2ICs1NDIs
MTYgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gSAogICAgIHJldHVy
biBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxDZWxsU3R5bGUoKQorUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlvbmFsQ2VsbFN0eWxl
KCkKIHsKICAgICBpZiAoIW1fc2hhcmVkQ2VsbFN0eWxlKQogICAgICAgICBtX3NoYXJlZENlbGxT
dHlsZSA9IGNyZWF0ZVNoYXJlZENlbGxTdHlsZSgpOwogICAgIHJldHVybiBtX3NoYXJlZENlbGxT
dHlsZTsKIH0KIAotc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBsZWFrR3JvdXBC
b3JkZXJTdHlsZShpbnQgcm93cykKK3N0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiBsZWFrR3JvdXBC
b3JkZXJTdHlsZShpbnQgcm93cykKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZSgpOwogICAgIGlmIChyb3dzKSB7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUJvcmRlclRvcFdpZHRoLCBDU1NWYWx1ZVRoaW4pOwogICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQ1NTVmFsdWVUaGluKTsKQEAgLTU2
NiwxNiArNTY2LDE2IEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVha0cK
ICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpLmxlYWtSZWYoKTsKIH0KIAotUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEdy
b3VwU3R5bGUoYm9vbCByb3dzKQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFi
bGVFbGVtZW50OjphZGRpdGlvbmFsR3JvdXBTdHlsZShib29sIHJvd3MpCiB7CiAgICAgaWYgKG1f
cnVsZXNBdHRyICE9IEdyb3Vwc1J1bGVzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChy
b3dzKSB7Ci0gICAgICAgIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcm93Qm9y
ZGVyU3R5bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGljIFN0
eWxlUHJvcGVydHlTZXQqIHJvd0JvcmRlclN0eWxlID0gbGVha0dyb3VwQm9yZGVyU3R5bGUodHJ1
ZSk7CiAgICAgICAgIHJldHVybiByb3dCb3JkZXJTdHlsZTsKICAgICB9Ci0gICAgc3RhdGljIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBjb2x1bW5Cb3JkZXJTdHlsZSA9IGxlYWtHcm91cEJv
cmRlclN0eWxlKGZhbHNlKTsKKyAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogY29sdW1uQm9y
ZGVyU3R5bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZShmYWxzZSk7CiAgICAgcmV0dXJuIGNvbHVt
bkJvcmRlclN0eWxlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1l
bnQuaAkocmV2aXNpb24gMTA2NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDggQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gYWRkaXRpb25hbENlbGxTdHlsZSgpOwotICAgIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cyk7Cisg
ICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQ2VsbFN0eWxlKCk7Cisg
ICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsR3JvdXBTdHlsZShib29s
IHJvd3MpOwogCiBwcml2YXRlOgogICAgIEhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCiAgICAgLy8gVXNlZCB0
byBvYnRhaW4gZWl0aGVyIGEgc29saWQgb3Igb3V0c2V0IGJvcmRlciBkZWNsIGFuZCB0byBkZWFs
IHdpdGggdGhlIGZyYW1lIGFuZCBydWxlcyBhdHRyaWJ1dGVzLgotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCkBA
IC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBDZWxsQm9yZGVycyBjZWxsQm9yZGVycygp
IGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3Jl
YXRlU2hhcmVkQ2VsbFN0eWxlKCk7CisgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBj
cmVhdGVTaGFyZWRDZWxsU3R5bGUoKTsKIAogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBs
YXN0Qm9keSgpIGNvbnN0OwogCkBAIC05OCw3ICs5OCw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNp
Z25lZCBzaG9ydCBtX3BhZGRpbmc7CiAgICAgT3duUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
PiBtX3Jvd3NDb2xsZWN0aW9uOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbV9zaGFyZWRDZWxsU3R5bGU7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fc2hh
cmVkQ2VsbFN0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjY2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFBhc3NSZWZQdHI8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ+IEhUTUwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRl
U3R5bGUoKQorUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkKIHsKICAgICBDb250YWluZXJOb2RlKiBw
ID0gcGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFn
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50
LmgJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBhZGRpdGlvbmFsQXR0cmli
dXRlU3R5bGUoKSBPVkVSUklERTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEJ1YmJsZVBvc2l0aW9uKGNvbnN0
IEwKICAgICAgICAgaG9zdFkgLT0gY29udGFpbmVyTG9jYXRpb24ueSgpICsgY29udGFpbmVyLT5i
b3JkZXJUb3AoKTsKICAgICB9CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBidWJibGUtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlID0gYnViYmxlLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIGhvc3RZICsgaG9zdFJlY3QuaGVpZ2h0KCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgIC8vIFRoZSAnbGVmdCcgdmFsdWUgb2YgOjot
d2Via2l0LXZhbGlkYXRpb24tYnViYmxlLWFycm93LgogICAgIGNvbnN0IGludCBidWJibGVBcnJv
d1RvcE9mZnNldCA9IDMyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTg5LDcgKzE5ODksNyBAQCBTdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpmb250KCkgCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHRlbXBEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbCA9IFN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBwYXJzZXIoIW1fdXNlc0NTU0NvbXBh
dGliaWxpdHlQYXJzZU1vZGUpOwogCiAgICAgU3RyaW5nIGRlY2xhcmF0aW9uVGV4dCgiZm9udDog
Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3
ICsxNzUsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCiAKIHZv
aWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2lu
dCYgcG9zaXRpb24pCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0g
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBl
bnN1cmVJbmxpbmVTdHlsZURlY2woKTsKIAogICAgIGRvdWJsZSBsZWZ0ID0gcG9zaXRpb24ueCgp
OwogICAgIGRvdWJsZSB0b3AgPSBwb3NpdGlvbi55KCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aQogCiB2b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6cmVzZXRQb3NpdGlvbigpCiB7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CisgICAgU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKIAogICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOwogICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRvcCk7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xQ
YW5lbEVsZW1lbnQ6Om1ha2VPcGFxdQogCiAgICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQo
KS0+cGFnZSgpID8gZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFk
ZUluRHVyYXRpb24oKSA6IDA7CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24s
IGR1cmF0aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwogICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDEuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojpt
YWtlVHJhbnMKICAgICBpZiAoIW1fb3BhcXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
KyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwog
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0
eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+
bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1Mp
OwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDAuMCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgUGFzc1JlZlB0cjxUcmFja0xpbWl0ZXJFbGVtZW50
PiBUcmFja0xpbQogewogICAgIFJlZlB0cjxUcmFja0xpbWl0ZXJFbGVtZW50PiBlbGVtZW50ID0g
YWRvcHRSZWYobmV3IFRyYWNrTGltaXRlckVsZW1lbnQoZG9jdW1lbnQpKTsKIAotICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxl
RGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5s
aW5lU3R5bGVEZWNsKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJp
bGl0eSwgQ1NTVmFsdWVIaWRkZW4pOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVBvc2l0aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTA2NjYwKQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzI3LDcgKzcyNyw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rv
ckNTU0EKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhdHRyU3R5bGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6
Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGF0dHJpYnV0ZS0+ZGVjbCgpLCAwKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpj
cmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgYXR0cmlidXRlLT5kZWNsKCktPmVuc3VyZUNTU1N0eWxl
RGVjbGFyYXRpb24oKSwgMCk7CiAgICAgICAgIGF0dHJTdHlsZU9iamVjdC0+c2V0U3RyaW5nKCJu
YW1lIiwgYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgYXR0clN0eWxlT2Jq
ZWN0LT5zZXRPYmplY3QoInN0eWxlIiwgaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoKSk7CiAgICAgICAgIGF0dHJTdHlsZXMtPnB1c2hPYmplY3QoYXR0clN0eWxlT2JqZWN0LnJl
bGVhc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsy
OTQsNyBAQCBib29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQoRXJyCiAgICAgcG9w
dWxhdGVBbGxQcm9wZXJ0aWVzKCZhbGxQcm9wZXJ0aWVzKTsKIAogICAgIGlmIChwcm9wZXJ0eVRl
eHQuc3RyaXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wTXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVt
cE11dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpj
cmVhdGUoKTsKICAgICAgICAgQ1NTUGFyc2VyIHA7CiAgICAgICAgIHAucGFyc2VEZWNsYXJhdGlv
bih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3Bl
cnR5TmFtZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVl
dCgpKTsKQEAgLTEzMTcsNyArMTMxNyw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRl
bXBEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNl
ciBwOwogICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5
bGVUZXh0LCByZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwog
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsMTIgKzQ0NywxMiBAQCBib29sIERyYWdDb250
cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGlubmVy
UmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxpemVkKCksIGZhbHNl
KTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkQXBwbHlTdHlsZShz
dHlsZS5nZXQoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCisgICAgICAgIGlmICghaW5uZXJGcmFtZS0+
ZWRpdG9yKCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRp
b24oKSwgaW5uZXJSYW5nZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigp
LT5hcHBseVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0Q29sb3IpOworICAgICAgICBp
bm5lckZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNs
YXJhdGlvbigpLCBFZGl0QWN0aW9uU2V0Q29sb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lv
biAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJp
ZXZlUmVzb3VyY2VzRm8KICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1
bGUtPmRlY2xhcmF0aW9uKCksIGRvY3VtZW50KTsKIH0KIAotdm9pZCBQYWdlU2VyaWFsaXplcjo6
cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBQYWdlU2Vy
aWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZURlY2xhcmF0aW9uLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFz
dHlsZURlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiAxMDY2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVl
dDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVu
ZGVyT2JqZWN0OworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIAogLy8gVGhpcyBjbGFzcyBpcyB1
c2VkIHRvIHNlcmlhbGl6ZSBhIHBhZ2UgY29udGVudHMgYmFjayB0byB0ZXh0ICh0eXBpY2FsbHkg
SFRNTCkuCiAvLyBJdCBzZXJpYWxpemVzIGFsbCB0aGUgcGFnZSBmcmFtZXMgYW5kIHJldHJpZXZl
cyByZXNvdXJjZXMgc3VjaCBhcyBpbWFnZXMgYW5kIENTUyBzdHlsZXNoZWV0cy4KQEAgLTc4LDcg
Kzc4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5
bGVTaGVldCosIGNvbnN0IEtVUkwmKTsKIAogICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhD
YWNoZWRJbWFnZSosIFJlbmRlck9iamVjdCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHJldHJp
ZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCBEb2N1bWVudCopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlv
bihTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsKICAgICB2b2lkIHJldHJpZXZlUmVzb3Vy
Y2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPFJl
c291cmNlPiogbV9yZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDcsNyArMTcwNyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICBMYXlvdXRTaXplIGRp
ZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCku
ZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKIAogICAgIEFTU0VSVChlbGVt
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlRGVjbGFyYXRpb24gPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkt
PmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVj
bGFyYXRpb24gPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpOwogICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+
c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWDsKIAogICAgIGlmIChyZXNpemUgIT0g
UkVTSVpFX1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTA2NjYw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eU9yVW5zdHls
ZWRBcHBsZVN0eWxlUwogICAgIGlmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHls
ZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBp
bmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKICAgICByZXR1cm4gKCFp
bmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2
NjYwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZH
Rm9udEZhY2VFbAogICAgICwgbV9mb250RmFjZVJ1bGUoQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUo
KSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb250X2ZhY2VUYWcpKTsKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG1fZm9udEZhY2VSdWxlLmdldCgpKTsKKyAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShtX2ZvbnRGYWNlUnVsZS5nZXQoKSk7CiAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0
U3RyaWN0UGFyc2luZyh0cnVlKTsKICAgICBtX2ZvbnRGYWNlUnVsZS0+c2V0RGVjbGFyYXRpb24o
c3R5bGVEZWNsYXJhdGlvbi5yZWxlYXNlKCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gMTA2NjYyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Nzc0MAorICAgICAgICBTcGxpdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiBpbnRv
IHNlcGFyYXRlIGludGVybmFsIGFuZCBDU1NPTSB0eXBlcyAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF90eXBpbmdTdHlsZV0pOgorCiAyMDEyLTAyLTAxICBEYW4gQmVybnN0
ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0L21hYyBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMDQ0MjY2Mz4gUGFnaW5hdGVkIGRpc3BsYXkgZG9lcyBub3QgcmVzcGVjdCBw
YWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0JKHJldmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29s
b3JNYWMuaD4KQEAgLTc5MSw3ICs3OTEsNyBAQCAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICop
X3R5cGluZ1N0eWxlCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdHlwaW5n
U3R5bGUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Y29weVR5cGluZ1N0eWxl
KCk7CisgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHR5cGluZ1N0eWxlID0gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmNvcHlUeXBpbmdTdHlsZSgpLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCk7CiAgICAgaWYgKCF0eXBpbmdTdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICByZXR1cm4ga2l0KHR5cGluZ1N0eWxlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMDY2NzMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAyLTAzICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzc3NDAKKyAgICAgICAgU3BsaXQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24gaW50byBzZXBhcmF0ZSBpbnRlcm5hbCBhbmQgQ1NTT00gdHlwZXMgCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQuY3Bw
OgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnN0eWxlUHJvcGVydHkpOgorCiAyMDEyLTAyLTAzICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgW1F0
XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZlcnMg
d2hlbiBwb3NzaWJsZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEwNjY2MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQ0LDcgKzg0NCw3IEBAIFFTdHJpbmcgUVdlYkVsZW1lbnQ6OnN0
eWxlUHJvcGVydHkoY29uc3QKICAgICBpZiAoIXByb3BJRCkKICAgICAgICAgcmV0dXJuIFFTdHJp
bmcoKTsKIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
KyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKIAogICAgIGlmIChzdHJhdGVn
eSA9PSBJbmxpbmVTdHlsZSkKICAgICAgICAgcmV0dXJuIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KHByb3BJRCk7CkBAIC05MDksNyArOTA5LDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6c2V0U3R5bGVQ
cm9wZXJ0eShjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgcHJvcElEID0gY3NzUHJv
cGVydHlJRChuYW1lKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBz
dGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVE
ZWNsKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4obV9lbGVtZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CiAgICAgaWYgKCFw
cm9wSUQgfHwgIXN0eWxlKQogICAgICAgICByZXR1cm47CiAK
</data>
<flag name="review"
          id="126852"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>