<?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>83612</bug_id>
          
          <creation_ts>2012-04-10 13:23:08 -0700</creation_ts>
          <short_desc>Split CSSStyleSheet into internal and CSSOM type</short_desc>
          <delta_ts>2012-04-11 20:53:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</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>599565</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-10 13:23:08 -0700</bug_when>
    <thetext>This will complete the separation of our style sheet data structures from CSSOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599875</commentid>
    <comment_count>1</comment_count>
      <attachid>136592</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-10 18:06:47 -0700</bug_when>
    <thetext>Created attachment 136592
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599880</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 18:10:49 -0700</bug_when>
    <thetext>Attachment 136592 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:73:  The parameter name &quot;ruleRangeMap&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSParser.h:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSStyleSheet.h:135:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSStyleSheet.h:135:  The parameter name &quot;rule&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSheet.h:183:  The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSheet.cpp:174:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 7 in 43 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>599943</commentid>
    <comment_count>3</comment_count>
      <attachid>136592</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-10 19:29:18 -0700</bug_when>
    <thetext>Comment on attachment 136592
patch

Attachment 136592 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12386129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599946</commentid>
    <comment_count>4</comment_count>
      <attachid>136592</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-10 19:35:27 -0700</bug_when>
    <thetext>Comment on attachment 136592
patch

Attachment 136592 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12380651</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600043</commentid>
    <comment_count>5</comment_count>
      <attachid>136592</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 22:42:09 -0700</bug_when>
    <thetext>Comment on attachment 136592
patch

Attachment 136592 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12380718</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600242</commentid>
    <comment_count>6</comment_count>
      <attachid>136666</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 07:27:44 -0700</bug_when>
    <thetext>Created attachment 136666
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600243</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 07:29:37 -0700</bug_when>
    <thetext>Attachment 136666 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:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 44 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>600267</commentid>
    <comment_count>8</comment_count>
      <attachid>136666</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 08:01:43 -0700</bug_when>
    <thetext>Comment on attachment 136666
rebased

Attachment 136666 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12387070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600275</commentid>
    <comment_count>9</comment_count>
      <attachid>136670</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 08:12:57 -0700</bug_when>
    <thetext>Created attachment 136670
try to fix chromium build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600278</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 08:16:47 -0700</bug_when>
    <thetext>Attachment 136670 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:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 44 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>600293</commentid>
    <comment_count>11</comment_count>
      <attachid>136670</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 08:45:00 -0700</bug_when>
    <thetext>Comment on attachment 136670
try to fix chromium build

Attachment 136670 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12380927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600328</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 09:40:04 -0700</bug_when>
    <thetext>It looks like V8 bindings are using WebCore::StyleSheetInternal as a namespace name :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600428</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 11:03:56 -0700</bug_when>
    <thetext>The name collision was fixed in http://trac.webkit.org/changeset/113881</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600429</commentid>
    <comment_count>14</comment_count>
      <attachid>136708</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 11:05:54 -0700</bug_when>
    <thetext>Created attachment 136708
resubmitting for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600433</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 11:10:33 -0700</bug_when>
    <thetext>Attachment 136708 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:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 44 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>600471</commentid>
    <comment_count>16</comment_count>
      <attachid>136708</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-04-11 12:07:57 -0700</bug_when>
    <thetext>Comment on attachment 136708
resubmitting for bots

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

&gt; Source/WebCore/css/CSSStyleSheet.cpp:510
&gt; +        m_childRuleCSSOMWrappers[index]-&gt;setParentStyleSheet(0);

We&apos;re gonna need a null check here, since this particular wrapper may not have been instantiated.

&gt; Source/WebCore/dom/ProcessingInstruction.cpp:240
&gt; +    else if (m_isXSL)
&gt; +        static_cast&lt;XSLStyleSheet*&gt;(m_sheet.get())-&gt;parseString(sheet, CSSStrictMode);

This looks silly, XSLStyleSheet shouldn&apos;t be taking a CSSParserMode.

&gt; Source/WebCore/xml/XSLStyleSheet.h:74
&gt; +    virtual bool isLoading() const;

Should add OVERRIDE while we are touching this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600530</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 13:14:19 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 136708 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136670&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSheet.cpp:510
&gt; &gt; +        m_childRuleCSSOMWrappers[index]-&gt;setParentStyleSheet(0);
&gt; 
&gt; We&apos;re gonna need a null check here, since this particular wrapper may not have been instantiated.

This bug was already in existing code. Fixed separately in http://trac.webkit.org/changeset/113898.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600557</commentid>
    <comment_count>18</comment_count>
      <attachid>136741</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 13:38:30 -0700</bug_when>
    <thetext>Created attachment 136741
try to fix chromium build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600564</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 13:43:45 -0700</bug_when>
    <thetext>Attachment 136741 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:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 45 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>600679</commentid>
    <comment_count>20</comment_count>
      <attachid>136778</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 16:11:30 -0700</bug_when>
    <thetext>Created attachment 136778
fix a crashing test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600686</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 16:17:28 -0700</bug_when>
    <thetext>Attachment 136778 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:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1025:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 45 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>600692</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-11 16:25:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/113922</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136592</attachid>
            <date>2012-04-10 18:06:47 -0700</date>
            <delta_ts>2012-04-11 07:27:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-internal-16.patch</filename>
            <type>text/plain</type>
            <size>119280</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTEzNjExLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIFN0cmluZyBDU1NGb250RmFjZVNyY1ZhbHVlOjpjdXN0b21Dc3NUZXgKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0KQordm9pZCBDU1NGb250RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZVNoZWV0KQogewogICAgIGlmICghaXNMb2NhbCgpKQogICAgICAgICBhZGRTdWJyZXNv
dXJjZVVSTCh1cmxzLCBzdHlsZVNoZWV0LT5jb21wbGV0ZVVSTChtX3Jlc291cmNlKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHJldmlzaW9uIDExMzY1
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNzc1Rl
eHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAgdm9pZCBhZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCop
OwogCiAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udChEb2N1bWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICsz
MywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U3R5bGVSdWxlSW1w
b3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0
IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKK1Bhc3NSZWZQ
dHI8U3R5bGVSdWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShTdHlsZVNoZWV0SW50
ZXJuYWwqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlT
ZXQ+IG1lZGlhKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSW1wb3J0KHBh
cmVudCwgaHJlZiwgbWVkaWEpKTsKIH0KIAotU3R5bGVSdWxlSW1wb3J0OjpTdHlsZVJ1bGVJbXBv
cnQoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8
TWVkaWFRdWVyeVNldD4gbWVkaWEpCitTdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVsZUltcG9ydChT
dHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRy
PE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQogICAgIDogU3R5bGVSdWxlQmFzZShJbXBvcnQsIDApCiAg
ICAgLCBtX3BhcmVudFN0eWxlU2hlZXQocGFyZW50KQogICAgICwgbV9zdHlsZVNoZWV0Q2xpZW50
KHRoaXMpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0OjpzZXRDU1NTdHls
ZVNoZWV0KGMKIHsKICAgICBpZiAobV9zdHlsZVNoZWV0KQogICAgICAgICBtX3N0eWxlU2hlZXQt
PmNsZWFyT3duZXJSdWxlKCk7Ci0gICAgbV9zdHlsZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3Jl
YXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIG1fc3R5bGVTaGVldCA9IFN0
eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwog
CiAgICAgYm9vbCBjcm9zc09yaWdpbkNTUyA9IGZhbHNlOwogICAgIGJvb2wgdmFsaWRNSU1FVHlw
ZSA9IGZhbHNlOwpAQCAtODgsNyArODgsNyBAQCB2b2lkIFN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldChjCiAgICAgICAgIGNyb3NzT3JpZ2luQ1NTID0gdHJ1ZTsKIAogICAgIGlmIChj
cm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhbV9zdHlsZVNoZWV0LT5oYXNTeW50
YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoKSkKLSAgICAgICAgbV9zdHlsZVNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgICAgICBt
X3N0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNl
VVJMLCBjaGFyc2V0KTsKIAogICAgIGlmIChpc1N0cmljdFBhcnNlck1vZGUoY3NzUGFyc2VyTW9k
ZSkgJiYgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpIHsKICAgICAgICAgLy8gV29yayBhcm91bmQg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM1MD4uCkBAIC05OCw5
ICs5OCw4IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0OjpzZXRDU1NTdHlsZVNoZWV0KGMKICAgICAg
ICAgLy8gd2hpbGUgdGhlIG90aGVyIGxhY2tzIHRoZSBzZWNvbmQgdHJhaWxpbmcgbmV3bGluZS4K
ICAgICAgICAgaWYgKGJhc2VVUkwuc3RyaW5nKCkuZW5kc1dpdGgoc2xhc2hLSFRNTEZpeGVzRG90
Q3NzKSAmJiAhc2hlZXRUZXh0LmlzTnVsbCgpICYmIG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNo
ZWV0LnN0YXJ0c1dpdGgoc2hlZXRUZXh0KQogICAgICAgICAgICAgICAgICYmIHNoZWV0VGV4dC5s
ZW5ndGgoKSA+PSBtZWRpYVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5sZW5ndGgoKSAtIDEpIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3N0eWxlU2hlZXQtPmxlbmd0aCgpID09IDEpOwotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldC0+ZGVsZXRl
UnVsZSgwLCBlYyk7CisgICAgICAgICAgICBBU1NFUlQobV9zdHlsZVNoZWV0LT5jaGlsZFJ1bGVz
KCkuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgbV9zdHlsZVNoZWV0LT5jbGVhclJ1bGVzKCk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzNiw4ICsxMzUsOCBAQCB2b2lkIFN0eWxlUnVsZUlt
cG9ydDo6cmVxdWVzdFN0eWxlU2hlZXQoCiAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBv
dXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGlu
IG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgotICAg
IENTU1N0eWxlU2hlZXQqIHJvb3RTaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsKLSAgICBmb3Ig
KENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OyBzaGVldDsgc2hlZXQg
PSBzaGVldC0+cGFyZW50U3R5bGVTaGVldCgpKSB7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBy
b290U2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7CisgICAgZm9yIChTdHlsZVNoZWV0SW50ZXJu
YWwqIHNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OyBzaGVldDsgc2hlZXQgPSBzaGVldC0+cGFy
ZW50U3R5bGVTaGVldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlmIHRo
ZSBmaW5hbFVSTCB3YXMgdXBkYXRlZCB2aWEgZG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwuCiAgICAg
ICAgIGlmIChhYnNIcmVmID09IHNoZWV0LT5maW5hbFVSTCgpLnN0cmluZygpKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTY2LDYgKzE2NSwxMiBAQCBDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRS
dWxlKFN0eWxlUnVsZUltCiB7CiB9CiAKK0NTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKCkK
K3sKKyAgICBpZiAobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3N0eWxlU2hl
ZXRDU1NPTVdyYXBwZXItPmNsZWFyT3duZXJSdWxlKCk7Cit9CisKIE1lZGlhTGlzdCogQ1NTSW1w
b3J0UnVsZTo6bWVkaWEoKQogewogICAgIHJldHVybiBtX2ltcG9ydFJ1bGUtPm1lZGlhUXVlcmll
cygpLT5lbnN1cmVNZWRpYUxpc3QocGFyZW50U3R5bGVTaGVldCgpKTsKQEAgLTE4Nyw0ICsxOTIs
MTUgQEAgU3RyaW5nIENTU0ltcG9ydFJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAorQ1NTU3R5bGVTaGVldCogQ1NTSW1wb3J0UnVsZTo6c3R5
bGVTaGVldCgpIGNvbnN0Cit7IAorICAgIGlmICghbV9pbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIp
CisgICAgICAgIG1fc3R5bGVTaGVldENTU09NV3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0
ZShtX2ltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgY29uc3RfY2FzdDxDU1NJbXBvcnRSdWxlKj4o
dGhpcykpOworICAgIHJldHVybiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIuZ2V0KCk7IAorfQor
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1
bGUuaAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTggKzMzLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBNZWRpYUxpc3Q7CiBjbGFzcyBN
ZWRpYVF1ZXJ5U2V0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogCiBjbGFzcyBTdHlsZVJ1
bGVJbXBvcnQgOiBwdWJsaWMgU3R5bGVSdWxlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBj
b25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gY3JlYXRlKFN0eWxlU2hlZXRJbnRlcm5hbCog
cGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOwog
CiAgICAgflN0eWxlUnVsZUltcG9ydCgpOwogICAgIAotICAgIENTU1N0eWxlU2hlZXQqIHBhcmVu
dFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlU2hlZXQ7IH0KKyAgICBT
dHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmVudFN0eWxlU2hlZXQ7IH0KICAgICB2b2lkIGNsZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgbV9w
YXJlbnRTdHlsZVNoZWV0ID0gMDsgfQogCiAgICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVy
biBtX3N0ckhyZWY7IH0KLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CisgICAgU3R5bGVTaGVldEludGVybmFsKiBzdHls
ZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CiAKICAgICAvLyBO
b3QgcGFydCBvZiB0aGUgQ1NTT00uCiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKQEAgLTcw
LDE1ICs3MSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwg
Y29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopOwogICAgIGZyaWVuZCBjbGFzcyBJbXBvcnRlZFN0
eWxlU2hlZXRDbGllbnQ7CiAKLSAgICBTdHlsZVJ1bGVJbXBvcnQoQ1NTU3R5bGVTaGVldCogcGFy
ZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOworICAg
IFN0eWxlUnVsZUltcG9ydChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCwgY29uc3QgU3RyaW5n
JiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+KTsKIAotICAgIC8vIEZYSU1FOiBUaGlz
IG5lZWRzIHRvIGdvIGF3YXkuCi0gICAgQ1NTU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0
OworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogbV9wYXJlbnRTdHlsZVNoZWV0OwogCiAgICAgSW1w
b3J0ZWRTdHlsZVNoZWV0Q2xpZW50IG1fc3R5bGVTaGVldENsaWVudDsKICAgICBTdHJpbmcgbV9z
dHJIcmVmOwogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKLSAgICBS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0OworICAgIFJlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IG1fc3R5bGVTaGVldDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRD
U1NTdHlsZVNoZWV0PiBtX2NhY2hlZFNoZWV0OwogICAgIGJvb2wgbV9sb2FkaW5nOwogfTsKQEAg
LTg2LDEwICs4NiwxMiBAQCBwcml2YXRlOgogY2xhc3MgQ1NTSW1wb3J0UnVsZSA6IHB1YmxpYyBD
U1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbXBvcnRSdWxlPiBj
cmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBydWxlLCBDU1NTdHlsZVNoZWV0KiBzaGVldCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IENTU0ltcG9ydFJ1bGUocnVsZSwgc2hlZXQpKTsgfQorICAgIAorICAg
IH5DU1NJbXBvcnRSdWxlKCk7CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wb3J0UnVsZS0+aHJlZigpOyB9CiAgICAgTWVkaWFMaXN0KiBtZWRpYSgpOwotICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1bGUtPnN0eWxl
U2hlZXQoKTsgfQorICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdDsKICAgICAK
ICAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCkBAIC05Nyw2ICs5OSw4IEBAIHByaXZhdGU6
CiAgICAgQ1NTSW1wb3J0UnVsZShTdHlsZVJ1bGVJbXBvcnQqLCBDU1NTdHlsZVNoZWV0Kik7CiAK
ICAgICBSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBtX2ltcG9ydFJ1bGU7CisKKyAgICBtdXRhYmxl
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFS
dWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNw
cAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKioKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAx
MiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTU4LDggKzU4LDkgQEAgdW5zaWdu
ZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKGNvbnN0IAogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKCkpOwotICAgIFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBuZXdSdWxlID0gcC5wYXJzZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxl
U3RyaW5nKTsKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVl
dCgpOworICAgIENTU1BhcnNlciBwYXJzZXIoc3R5bGVTaGVldCA/IHN0eWxlU2hlZXQtPmludGVy
bmFsKCktPmNzc1BhcnNlck1vZGUoKSA6IENTU1N0cmljdE1vZGUpOworICAgIFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBuZXdSdWxlID0gcGFyc2VyLnBhcnNlUnVsZShzdHlsZVNoZWV0ID8gc3R5bGVT
aGVldC0+aW50ZXJuYWwoKSA6IDAsIHJ1bGVTdHJpbmcpOwogICAgIGlmICghbmV3UnVsZSkgewog
ICAgICAgICAvLyBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBydWxlIGhhcyBh
IHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KICAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyAr
MjUyLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIAogICAgIHJl
c2V0UnVsZUJvZHlNYXJrcygpOwogfQogCi12b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NT
dHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1i
ZXIsIFN0eWxlUnVsZVJhbmdlTWFwKiBydWxlUmFuZ2VNYXApCit2b2lkIENTU1BhcnNlcjo6cGFy
c2VTaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywg
aW50IHN0YXJ0TGluZU51bWJlciwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKIHsK
ICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKICAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFy
QXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgpAQCAtMjcwLDcgKzI3MCw3IEBA
IHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQKICAgICBtX3J1bGUgPSAw
OwogfQogCi1QYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6cGFyc2VSdWxlKENT
U1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK1Bhc3NSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXJzZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiBzaGVl
dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAg
ICAgbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwpAQCAtMjc5LDcgKzI3OSw3
IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXIKICAgICByZXR1cm4g
bV9ydWxlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJz
ZXI6OnBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQgKnNoZWV0LCBjb25zdCBTdHJpbmcg
JnN0cmluZykKK1Bhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXJzZUtleWZy
YW1lUnVsZShTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0LCBjb25zdCBTdHJpbmcgJnN0cmluZykK
IHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQt
a2V5ZnJhbWUtcnVsZXsgIiwgc3RyaW5nLCAifSAiKTsKQEAgLTkwOSw3ICs5MDksNyBAQCBzdGF0
aWMgYm9vbCBwYXJzZUtleXdvcmRWYWx1ZShTdHlsZVByb3BlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCitQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29u
dGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGR1bW15U3R5
bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBpZiAoIXBhcnNlVmFsdWUoZHVt
bXlTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlGb250RmFtaWx5LCBzdHJpbmcsIGZhbHNlLCBDU1NR
dWlya3NNb2RlLCBjb250ZXh0U3R5bGVTaGVldCkpCkBAIC05MTcsNyArOTE3LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFycwogICAgIHJldHVybiBzdGF0aWNfcG9p
bnRlcl9jYXN0PENTU1ZhbHVlTGlzdD4oZHVtbXlTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
U3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxl
U2hlZXQpCiB7CiAgICAgaWYgKHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoZGVjbGFyYXRpb24sIHBy
b3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC05MjksNyArOTI5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
U3R5bGVQcm9wZXJ0eQogICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwg
cHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKIH0KIAot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24s
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1w
b3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgU3R5bGVT
aGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBzZXRTdHlsZVNoZWV0KGNv
bnRleHRTdHlsZVNoZWV0KTsKIApAQCAtMTAwNyw3ICsxMDA3LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJgogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rv
cihjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQqIGRvYywgQ1NTU2VsZWN0b3JMaXN0JiBz
ZWxlY3Rvckxpc3QpCiB7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGR1bW15U3R5bGVTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShkb2MpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+IGR1bW15U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKGRvYyk7
CiAKICAgICBzZXRTdHlsZVNoZWV0KGR1bW15U3R5bGVTaGVldC5nZXQoKSk7CiAgICAgbV9zZWxl
Y3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gJnNlbGVjdG9yTGlzdDsKQEAgLTEwMjIsNyArMTAy
Miw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmkKICAgICBBU1NF
UlQoZHVtbXlTdHlsZVNoZWV0LT5oYXNPbmVSZWYoKSk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwg
Q1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VE
ZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiBzdHlsZVNvdXJjZURhdGEsIFN0eWxl
U2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gTGVuZ3RoIG9mIHRo
ZSAiQC13ZWJraXQtZGVjbHN7IiBwcmVmaXguCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBy
ZWZpeExlbmd0aCA9IDE1OwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmNs
ZWFyUHJvcGVydGllcygpCiAgICAgbV9oYXNGb250RmFjZU9ubHlWYWx1ZXMgPSBmYWxzZTsKIH0K
IAotdm9pZCBDU1NQYXJzZXI6OnNldFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCkKK3ZvaWQgQ1NTUGFyc2VyOjpzZXRTdHlsZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5
bGVTaGVldCkKIHsKICAgICBtX3N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0OwogfQpAQCAtNzI4Myw3
ICs3MjgzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChjb25zdCBTdAogICAg
IEFTU0VSVChkb2MpOwogICAgIEFTU0VSVChkb2MtPmNzc1JlZ2lvbnNFbmFibGVkKCkpOwogCi0g
ICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGR1bW15U3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZShkb2MpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IGR1bW15U3R5bGVT
aGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKGRvYyk7CiAgICAgc2V0U3R5bGVTaGVl
dChkdW1teVN0eWxlU2hlZXQuZ2V0KCkpOwogCiAgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWRl
Y2xzey13ZWJraXQtZmxvdy1pbnRvOiIsIGZsb3dOYW1lLCAifSIpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZTsKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgQ1NTUHJvcGVy
dHk7CiBjbGFzcyBDU1NTZWxlY3Rvckxpc3Q7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3Mg
Q1NTVmFsdWU7CiBjbGFzcyBDU1NWYWx1ZUxpc3Q7CiBjbGFzcyBDU1NXcmFwU2hhcGU7CkBAIC02
Miw2ICs2MSw3IEBAIGNsYXNzIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVJ1
bGVCYXNlOwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVLZXlmcmFtZTsK
K2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKIGNsYXNz
IENTU1BhcnNlciB7CkBAIC03MCwxNSArNzAsMTUgQEAgcHVibGljOgogCiAgICAgfkNTU1BhcnNl
cigpOwogCi0gICAgdm9pZCBwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcm
LCBpbnQgc3RhcnRMaW5lTnVtYmVyID0gMCwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1h
cCA9IDApOwotICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKENTU1N0eWxl
U2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBh
cnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0
aWMgYm9vbCBwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgQ1NTU3R5bGVTaGVldCop
OworICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqLCBjb25zdCBTdHJpbmcm
LCBpbnQgc3RhcnRMaW5lTnVtYmVyID0gMCwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1h
cCA9IDApOworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKFN0eWxlU2hl
ZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxl
U2hlZXRJbnRlcm5hbCopOwogICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xv
ciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIGJvb2wg
cGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCop
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVZhbHVl
KGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZl
KGludCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVjbGFyYXRpb24o
U3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURh
dGE+KiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJvb2wgcGFyc2VE
ZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPENTU1N0
eWxlU291cmNlRGF0YT4qLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KTsK
ICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcm
KTsKIAogICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSBjb25zdDsKQEAgLTI4Niw3ICsyODYs
NyBAQCBwdWJsaWM6CiAgICAgQ1NTUGFyc2VyTW9kZSBtX2Nzc1BhcnNlck1vZGU7CiAgICAgYm9v
bCBtX2ltcG9ydGFudDsKICAgICBDU1NQcm9wZXJ0eUlEIG1faWQ7Ci0gICAgQ1NTU3R5bGVTaGVl
dCogbV9zdHlsZVNoZWV0OworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogbV9zdHlsZVNoZWV0Owog
ICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7CiAgICAgUmVmUHRyPFN0eWxlS2V5ZnJh
bWU+IG1fa2V5ZnJhbWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFRdWVyeTsKQEAg
LTM0NSw3ICszNDUsNyBAQCBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tl
bihpbnQpOwogICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29sKTsKIAotICAg
IHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgdm9pZCBzZXRTdHlsZVNo
ZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCopOwogCiAgICAgaW5saW5lIGJvb2wgaW5TdHJpY3RNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1N0cmljdE1vZGUgfHwgbV9j
c3NQYXJzZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGU7IH0KICAgICBpbmxpbmUgYm9vbCBpblF1
aXJrc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc1BhcnNlck1vZGUgPT0gQ1NTUXVpcmtzTW9k
ZTsgfQpAQCAtMzYzLDcgKzM2Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0dlbmVyYXRlZElt
YWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUqKSBjb25zdDsKICAgICBib29sIHBhcnNlR2VuZXJhdGVk
SW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogCi0gICAgYm9v
bCBwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpOwor
ICAgIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0
eWxlU2hlZXQpOwogCiAgICAgZW51bSBTaXplUGFyYW1ldGVyVHlwZSB7CiAgICAgICAgIE5vbmUs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9u
IDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNjAsNyArMTA2MCw3IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3VzdG9tQ3NzVGV4dCgKICAgICByZXR1cm4gdGV4dDsKIH0KIAotdm9pZCBDU1NQcmltaXRp
dmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMs
IGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ByaW1pdGl2ZVZhbHVl
OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3Qg
U3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewogICAgIGlmIChtX3ByaW1pdGl2ZVVu
aXRUeXBlID09IENTU19VUkkpCiAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIHN0eWxl
U2hlZXQtPmNvbXBsZXRlVVJMKG1fdmFsdWUuc3RyaW5nKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIG1faXNRdWly
a1ZhbHVlOyB9CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsK
IAogICAgIExlbmd0aCB2aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBTdHJpbmcgQ1NTUmVmbGVjdFZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0KQordm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0
eWxlU2hlZXQpCiB7CiAgICAgaWYgKG1fbWFzaykKICAgICAgICAgbV9tYXNrLT5hZGRTdWJyZXNv
dXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NSZWZsZWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UmVmbGVjdFZhbHVlLmgJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NSZWZsZWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAKICAgICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQq
KTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jiwg
Y29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKIHByaXZhdGU6CiAgICAgQ1NTUmVmbGVjdFZh
bHVlKENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBvZmZzZXQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IG1hc2spCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NSdWxlLmgJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE1ICs2OSw2IEBAIHB1YmxpYzoKICAgICBib29s
IGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBXRUJLSVRfUkVHSU9OX1JV
TEU7IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJ
TVBPUlRfUlVMRTsgfQogCi0gICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRSdWxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFy
ZW50UnVsZSgpLT5jc3NQYXJzZXJNb2RlKCk7Ci0gICAgICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpLT5jc3NQYXJzZXJNb2Rl
KCk7Ci0gICAgICAgIHJldHVybiBDU1NTdHJpY3RNb2RlOwotICAgIH0KLQogICAgIHZvaWQgc2V0
UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogICAgIHsKICAgICAg
ICAgbV9wYXJlbnRJc1J1bGUgPSBmYWxzZTsKQEAgLTEwMiwxMyArOTMsNiBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgS1VSTCBiYXNlVVJMKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hl
ZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFzZVVSTCgpOwotICAgICAg
ICByZXR1cm4gS1VSTCgpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIENTU1J1bGUoQ1NTU3R5
bGVTaGVldCogcGFyZW50LCBUeXBlIHR5cGUpCiAgICAgICAgIDogbV9oYXNDYWNoZWRTZWxlY3Rv
clRleHQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAKICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+
ID4gPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVT
aGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDAs
IGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChT
dHlsZVNoZWV0SW50ZXJuYWwqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVT
ZWxlY3RvciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwogCiAgICAgdm9pZCBhZGRT
dHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwog
ICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0lu
UmVnaW9uUnVsZSA9IGZhbHNlKTsKQEAgLTI4NSwxMyArMjg1LDEzIEBAIHN0YXRpYyBSdWxlU2V0
KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3Rh
dGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRW
aWV3U291cmNlU3R5bGU7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxl
U2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogZGVmYXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMg
Q1NTU3R5bGVTaGVldCogcXVpcmtzU3R5bGVTaGVldDsKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBz
dmdTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hlZXQqIG1hdGhNTFN0eWxlU2hlZXQ7Ci1z
dGF0aWMgQ1NTU3R5bGVTaGVldCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NT
U3R5bGVTaGVldCogZnVsbHNjcmVlblN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVy
bmFsKiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwq
IGRlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcXVpcmtzU3R5
bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hlZXQ7CitzdGF0
aWMgU3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hl
ZXRJbnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldElu
dGVybmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKIAogUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTM5OSw3ICszOTksNyBAQCBDU1NT
dHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAKICAgICAvLyBGSVhNRTogVGhp
cyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKICAgICBPd25Q
dHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIGlmIChD
U1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkK
KyAgICBpZiAoU3R5bGVTaGVldEludGVybmFsKiBwYWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBh
Z2VVc2VyU2hlZXQoKSkKICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
cGFnZVVzZXJTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICBhZGRBdXRob3JSdWxlc0FuZENv
bGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5wYWdlR3JvdXBVc2VyU2hlZXRzKCks
ICp0ZW1wVXNlclN0eWxlKTsKICAgICBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNG
cm9tU2hlZXRzKGRvY3VtZW50LT5kb2N1bWVudFVzZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUp
OwpAQCAtNDE4LDE0ICs0MTgsMTQgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rv
cihEb2N1bQogICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIGRvY3VtZW50LT5zdHlsZVNo
ZWV0cygpLT52ZWN0b3IoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkQXV0aG9y
UnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogdXNlclNoZWV0cywg
UnVsZVNldCYgdXNlclN0eWxlKQogewogICAgIGlmICghdXNlclNoZWV0cykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdXNlclNoZWV0cy0+c2l6ZSgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBjb25zdCBSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7CisgICAgICAgIGNv
bnN0IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+JiBzaGVldCA9IHVzZXJTaGVldHMtPmF0KGkp
OwogICAgICAgICBpZiAoc2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSkKICAgICAgICAgICAgIHVz
ZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsK
ICAgICAgICAgZWxzZQpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y29sbGVjdEZlYXR1cmVzKCkKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBD
b250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTY29wZShjb25zdCBDU1NT
dHlsZVNoZWV0KiBzaGVldCkKK2NvbnN0IENvbnRhaW5lck5vZGUqIENTU1N0eWxlU2VsZWN0b3I6
OmRldGVybWluZVNjb3BlKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQpCiB7CiAgICAg
QVNTRVJUKHNoZWV0KTsKIApAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwZW5kQXV0aG9yU3R5bGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBDU1NT
dHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNo
ZWV0c1tpXS5nZXQoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAgICAgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1pbmVTY29wZShjc3NTaGVldCk7CisgICAgICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQtPmlu
dGVybmFsKCkpOwogICAgICAgICBpZiAoc2NvcGUpIHsKICAgICAgICAgICAgIFNjb3BlZFJ1bGVT
ZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2Nv
cGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAt
NTE0LDcgKzUxNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGUK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgbV9hdXRo
b3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcyk7Cisg
ICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LT5pbnRlcm5h
bCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICBpZiAoIW1fc3R5bGVSdWxlVG9DU1NPTVdy
YXBwZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgY3NzU2hlZXQpOwogICAgIH0KQEAgLTY4MCwxNCAr
NjgwLDE0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmNsZWFyKCkKICAgICB1
c2VzTGlua1J1bGVzID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVB
U2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBwYXJz
ZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCogc2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9u
IHB1cnBvc2UKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVldEludGVy
bmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKICAg
ICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CiAKLXN0YXRp
YyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVBU2hlZXQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgc2l6ZSkKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQogewogICAgIHJldHVybiBwYXJzZVVB
U2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKIH0KQEAgLTIyMzcsNyArMjIzNyw3IEBA
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TZWxlY3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAgICAgCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRT
ZWxlY3RvclNjb3BlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Nj
b3BlcykKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9y
U2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpCiB7CiAgICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CiAKQEAgLTI0NjIs
NyArMjQ2Miw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWcKICAg
ICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWly
KHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQucmVsZWFz
ZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxl
Y3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit2b2lkIFJ1
bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxl
Y3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNoZWV0KTsK
IApAQCAtMjkwMyw3ICsyOTAzLDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KEhhc2hNYXAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhh
c2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgRG9j
dW1lbnQqIGRvY3VtZW50KQorc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1h
cDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBIYXNoU2V0
PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIFN0eWxlU2hlZXRJbnRl
cm5hbCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVy
bjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdyYXBwZXIgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CisgICAgc2hlZXRXcmFwcGVyU2V0LmFkZChzdHls
ZVNoZWV0V3JhcHBlcik7CisgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3R5
bGVTaGVldFdyYXBwZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFw
cGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJN
YXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNldCwgRG9j
dW1lbnQqIGRvY3VtZW50KQogewogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLnNpemUoKTsgKytpKSB7CkBAIC0y
OTEyLDIxICsyOTIxLDIyIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hN
YXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3
cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOwogICAg
IH0KLSAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBkb2N1bWVudC0+cGFnZVVz
ZXJTaGVldCgpKTsKKyAgICBpZiAoZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkKKyAgICAgICAg
Y29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc2hlZXRXcmFwcGVyU2V0LCBkb2N1bWVu
dC0+cGFnZVVzZXJTaGVldCgpKTsKIH0KIAogQ1NTU3R5bGVSdWxlKiBDU1NTdHlsZVNlbGVjdG9y
OjplbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSogcnVsZSkKIHsK
ICAgICBpZiAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0
eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBkZWZhdWx0U3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIHF1aXJrc1N0
eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NT
T01XcmFwcGVyTWFwLCBzdmdTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBl
cnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbWF0aE1MU3R5bGVTaGVldCk7Ci0gICAg
ICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOworICAgICAg
ICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0
eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKKyAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBkZWZhdWx0U3R5bGVTaGVldCk7CisgICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldCwgcXVpcmtzU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCwgc3ZnU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBl
clNldCwgbWF0aE1MU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwg
bWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQs
IGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKIAotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBkb2N1bWVudCgpKTsKKyAgICAgICAgY29sbGVj
dENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0
Q1NTT01XcmFwcGVyU2V0LCBkb2N1bWVudCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3
IEBAIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247CiBjbGFzcyBT
dHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7
CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTsKQEAgLTE1Niw3ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0PiA+Jik7CiAgICAgCiAgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNsYXNz
ZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNlbGVj
dG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290IGVs
ZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCi0gICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVz
aGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxlU2hlZXQqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7
CisgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxl
U2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAogcHJpdmF0ZToKICAgICB2
b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwpAQCAtMzk5LDcgKzQwMCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxl
OwogCi0gICAgdm9pZCBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiosIFJ1bGVTZXQmIHVzZXJTdHls
ZSk7CisgICAgdm9pZCBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVsZVNldCYgdXNl
clN0eWxlKTsKIAogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKQEAgLTQ5
NiwxMyArNDk3LDE0IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5
JiBtX2FwcGx5UHJvcGVydHk7CiAgICAgCiAgICAgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8
Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXA7CisgICAgSGFzaFNl
dDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQ7CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIHN0YXRpYyBjb25zdCBDb250
YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAgc3Rh
dGljIGNvbnN0IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IFN0eWxlU2hlZXRJ
bnRlcm5hbCopOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5lck5vZGUqLCBP
d25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc0LDkgKzc0LDExIEBAIHN0YXRp
YyBib29sIGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQYXIKIH0KICNlbmRpZgogCi1DU1NTdHls
ZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogU3R5
bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBiYXNlVVJMKQorU3R5bGVTaGVldEludGVybmFsOjpT
dHlsZVNoZWV0SW50ZXJuYWwoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5h
bFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6
IG1fb3duZXJOb2RlKHBhcmVudE5vZGUpCiAgICAgLCBtX293bmVyUnVsZSgwKQorICAgICwgbV9v
cmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCiAgICAg
LCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxzZSkKICAgICAs
IG1fY3NzUGFyc2VyTW9kZShDU1NRdWlya3NNb2RlKQpAQCAtODcsMjUgKzg5LDI3IEBAIENTU1N0
eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSogcGFyZW4KICAgICBBU1NFUlQoaXNBY2NlcHRh
YmxlQ1NTU3R5bGVTaGVldFBhcmVudChwYXJlbnROb2RlKSk7CiB9CiAKLUNTU1N0eWxlU2hlZXQ6
OkNTU1N0eWxlU2hlZXQoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYg
aHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDog
U3R5bGVTaGVldChocmVmLCBiYXNlVVJMKQorU3R5bGVTaGVldEludGVybmFsOjpTdHlsZVNoZWV0
SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAg
OiBtX293bmVyTm9kZSgwKQogICAgICwgbV9vd25lclJ1bGUob3duZXJSdWxlKQorICAgICwgbV9v
cmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCiAgICAg
LCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxzZSkKICAgICAs
IG1fY3NzUGFyc2VyTW9kZSgob3duZXJSdWxlICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVl
dCgpKSA/IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBD
U1NTdHJpY3RNb2RlKQogICAgICwgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIodHJ1
ZSkKICAgICAsIG1fZGlkTG9hZEVycm9yT2NjdXIoZmFsc2UpCiB7Ci0gICAgQ1NTU3R5bGVTaGVl
dCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQo
KSA6IDA7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnRTaGVldCA9IG93bmVyUnVsZSA/
IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKICAgICBtX2lzVXNlclN0eWxlU2hl
ZXQgPSBwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkgOiBmYWxz
ZTsKIH0KIAotQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQorU3R5bGVTaGVldEludGVy
bmFsOjp+U3R5bGVTaGVldEludGVybmFsKCkKIHsKICAgICBjbGVhclJ1bGVzKCk7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTaGVldDo6cGFyc2VyQXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IHJ1bGUpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VyQXBwZW5kUnVsZShQYXNz
UmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCiB7CiAgICAgQVNTRVJUKCFydWxlLT5pc0NoYXJz
ZXRSdWxlKCkpOwogICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewpAQCAtMTE4LDI0ICsx
MjIsMjQgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJzZXJBcHBlbmRSdWxlKFBhcwogICAgIG1f
Y2hpbGRSdWxlcy5hcHBlbmQocnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZT4gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4KQorUGFz
c1JlZlB0cjxDU1NSdWxlPiBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09N
V3JhcHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3JhcHBlcikKIHsK
LSAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNv
dW50KCkpOwogICAgIAogICAgIHVuc2lnbmVkIGNoaWxkVmVjdG9ySW5kZXggPSBpbmRleDsKICAg
ICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoaW5kZXggPT0gMCkKLSAgICAg
ICAgICAgIHJldHVybiBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHRoaXMsIG1fZW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGUpOworICAgICAgICAgICAgcmV0dXJuIENTU0NoYXJzZXRSdWxlOjpjcmVhdGUo
cGFyZW50V3JhcHBlciwgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSk7CiAgICAgICAgIC0tY2hp
bGRWZWN0b3JJbmRleDsKICAgICB9CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9y
dFJ1bGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJ
bmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1faW1wb3J0
UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRXcmFwcGVy
KTsKICAgICAKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwot
ICAgIHJldHVybiBtX2NoaWxkUnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3Jh
cHBlcih0aGlzKTsKKyAgICByZXR1cm4gbV9jaGlsZFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5j
cmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CiB9CiAKLXVuc2lnbmVkIENTU1N0eWxl
U2hlZXQ6Omxlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnJ1bGVD
b3VudCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICByZXN1bHQgKz0g
aGFzQ2hhcnNldFJ1bGUoKSA/IDEgOiAwOwpAQCAtMTQ0LDM4ICsxNDgsMTMgQEAgdW5zaWduZWQg
Q1NTU3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1D
U1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIHVuc2ln
bmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOwotICAgIGlmIChpbmRleCA+PSBydWxlQ291bnQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMu
aXNFbXB0eSgpKQotICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuZ3JvdyhydWxlQ291
bnQpOwotICAgIEFTU0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IHJ1bGVD
b3VudCk7Ci0KLSAgICBSZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxkUnVsZUNTU09N
V3JhcHBlcnNbaW5kZXhdOwotICAgIGlmICghY3NzUnVsZSkKLSAgICAgICAgY3NzUnVsZSA9IGNy
ZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcihpbmRleCk7Ci0gICAgcmV0dXJuIGNzc1J1bGUuZ2V0
KCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGFyc2V0UnVsZSgpCit2b2lkIFN0
eWxlU2hlZXRJbnRlcm5hbDo6Y2xlYXJDaGFyc2V0UnVsZSgpCiB7CiAgICAgbV9lbmNvZGluZ0Zy
b21DaGFyc2V0UnVsZSA9IFN0cmluZygpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFy
UnVsZXMoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmNsZWFyUnVsZXMoKQogewotICAgIC8v
IEZvciBzdHlsZSBydWxlcyBvdXRzaWRlIHRoZSBkb2N1bWVudCwgLnBhcmVudFN0eWxlU2hlZXQg
Y2FuIGJlY29tZSBudWxsIGV2ZW4gaWYgdGhlIHN0eWxlIHJ1bGUKLSAgICAvLyBpcyBzdGlsbCBv
YnNlcnZhYmxlIGZyb20gSmF2YVNjcmlwdC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiAu
cGFyZW50Tm9kZSBmb3Igbm9kZXMsIGJ1dAotICAgIC8vIGl0J3Mgbm90IGlkZWFsIGJlY2F1c2Ug
aXQgbWFrZXMgdGhlIENTU09NJ3MgYmVoYXZpb3IgZGVwZW5kIG9uIHRoZSB0aW1pbmcgb2YgZ2Fy
YmFnZSBjb2xsZWN0aW9uLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVyc1tpXSkKLSAgICAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+
c2V0UGFyZW50U3R5bGVTaGVldCgwKTsKLSAgICB9Ci0gICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzLmNsZWFyKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbXBvcnRSdWxl
cy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQobV9pbXBvcnRSdWxlcy5hdChpKS0+cGFy
ZW50U3R5bGVTaGVldCgpID09IHRoaXMpOwogICAgICAgICBtX2ltcG9ydFJ1bGVzW2ldLT5jbGVh
clBhcmVudFN0eWxlU2hlZXQoKTsKQEAgLTE4NSw0NSArMTY0LDE1IEBAIHZvaWQgQ1NTU3R5bGVT
aGVldDo6Y2xlYXJSdWxlcygpCiAgICAgY2xlYXJDaGFyc2V0UnVsZSgpOwogfQogCi12b2lkIENT
U1N0eWxlU2hlZXQ6OnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmcpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdG
cm9tQ2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBQYXJzZXIg
ZW5mb3JjZXMgdGhhdCB0aGVyZSBpcyBldmVyIG9ubHkgb25lIEBjaGFyc2V0LgogICAgIEFTU0VS
VChtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpKTsKICAgICBtX2VuY29kaW5nRnJv
bUNoYXJzZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1QYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBD
U1NTdHlsZVNoZWV0OjpydWxlcygpCitib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3JhcHBlcklu
c2VydFJ1bGUoUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGluZGV4KQogewot
ICAgIEtVUkwgdXJsID0gZmluYWxVUkwoKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmaW5k
RG9jdW1lbnQoKTsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYgIWRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIC8vIElFIGJlaGF2aW9yLgotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbm9u
Q2hhcnNldFJ1bGVzID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIHVuc2lnbmVk
IHJ1bGVDb3VudCA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxl
Q291bnQ7ICsraSkgewotICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsKLSAgICAgICAg
aWYgKHJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBub25DaGFyc2V0UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOwotICAgIH0KLSAgICByZXR1
cm4gbm9uQ2hhcnNldFJ1bGVzLnJlbGVhc2UoKTsKLX0KLQotdW5zaWduZWQgQ1NTU3R5bGVTaGVl
dDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGluZGV4ID4gbGVuZ3Ro
KCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIENTU1BhcnNlciBwKGNzc1BhcnNlck1vZGUoKSk7Ci0gICAgUmVmUHRyPFN0eWxl
UnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZSh0aGlzLCBydWxlU3RyaW5nKTsKLQotICAgIGlm
ICghcnVsZSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KICAgICAvLyBQYXJzZXI6OnBhcnNlUnVsZSBkb2Vzbid0IGN1cnJlbnRseSBhbGxvdyBA
Y2hhcnNldCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBpdC4KICAgICBBU1NFUlQoIXJ1
bGUtPmlzQ2hhcnNldFJ1bGUoKSk7CiAgICAgCkBAIC0yMzIsOTkgKzE4MSw1NiBAQCB1bnNpZ25l
ZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgaWYgKGhhc0NoYXJzZXRSdWxl
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPT0gMCkgewogICAgICAgICAgICAg
Ly8gTm90aGluZyBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIEBjaGFyc2V0LgotICAgICAgICAgICAg
ZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAtLWNoaWxkVmVjdG9ySW5k
ZXg7CiAgICAgfQogICAgIAogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxl
cy5zaXplKCkgfHwgKGNoaWxkVmVjdG9ySW5kZXggPT0gbV9pbXBvcnRSdWxlcy5zaXplKCkgJiYg
cnVsZS0+aXNJbXBvcnRSdWxlKCkpKSB7CiAgICAgICAgIC8vIEluc2VydGluZyBub24taW1wb3J0
IHJ1bGUgYmVmb3JlIEBpbXBvcnQgaXMgbm90IGFsbG93ZWQuCi0gICAgICAgIGlmICghcnVsZS0+
aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJS
OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFydWxlLT5p
c0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9pbXBv
cnRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSW1w
b3J0Kj4ocnVsZS5nZXQoKSkpOwogICAgICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5k
ZXhdLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwotICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAg
IC8vIEZJWE1FOiBTdHlsZXNoZWV0IGRvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIG1lYW5pbmdmdWxs
eSBiZWZvcmUgdGhlIGltcG9ydGVkIHNoZWV0cyBhcmUgbG9hZGVkLgorICAgICAgICBzdHlsZVNo
ZWV0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSW5zZXJ0
aW5nIEBpbXBvcnQgcnVsZSBhZnRlciBhIG5vbi1pbXBvcnQgcnVsZSBpcyBub3QgYWxsb3dlZC4K
LSAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgZWMgPSBISUVSQVJDSFlf
UkVRVUVTVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAocnVsZS0+aXNJ
bXBvcnRSdWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3RvckluZGV4
IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogIAogICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hp
bGRWZWN0b3JJbmRleCwgcnVsZS5yZWxlYXNlKCkpOwogICAgIAotc3VjY2VzczoKLSAgICBpZiAo
IW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NSdWxlPigpKTsKLQotICAgIC8v
IEZJWE1FOiBTdHlsZXNoZWV0IGRvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIG1lYW5pbmdmdWxseSBi
ZWZvcmUgdGhlIGltcG9ydGVkIHNoZWV0cyBhcmUgbG9hZGVkLgogICAgIHN0eWxlU2hlZXRDaGFu
Z2VkKCk7Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1pbnQgQ1NTU3R5bGVTaGVldDo6YWRkUnVs
ZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBjb25zdCBTdHJpbmcmIHN0eWxlLCBpbnQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGluc2VydFJ1bGUoc2VsZWN0b3IgKyAiIHsgIiAr
IHN0eWxlICsgIiB9IiwgaW5kZXgsIGVjKTsKLQotICAgIC8vIEFzIHBlciBNaWNyb3NvZnQgZG9j
dW1lbnRhdGlvbiwgYWx3YXlzIHJldHVybiAtMS4KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBD
U1NTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmlu
ZyYgc3R5bGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBhZGRSdWxlKHNlbGVj
dG9yLCBzdHlsZSwgbGVuZ3RoKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Q1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMoKQotewotICAgIEtVUkwgdXJsID0gZmluYWxVUkwoKTsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmaW5kRG9jdW1lbnQoKTsKLSAgICBpZiAoIXVybC5p
c0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHVybCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9ydWxlTGlzdENTU09N
V3JhcHBlcikKLSAgICAgICAgbV9ydWxlTGlzdENTU09NV3JhcHBlciA9IGFkb3B0UHRyKG5ldyBT
dHlsZVNoZWV0Q1NTUnVsZUxpc3QodGhpcykpOwotICAgIHJldHVybiBtX3J1bGVMaXN0Q1NTT01X
cmFwcGVyLmdldCgpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6
OmRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBTdHls
ZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KQogewotICAg
IGlmIChpbmRleCA+PSBsZW5ndGgoKSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGVjID0gMDsKICAgICB1bnNpZ25lZCBj
aGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0NoYXJzZXRSdWxlKCkpIHsKICAg
ICAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPT0gMCkgewogICAgICAgICAgICAgY2xlYXJDaGFy
c2V0UnVsZSgpOwotICAgICAgICAgICAgZ290byBzdWNjZXNzOworICAgICAgICAgICAgc3R5bGVT
aGVldENoYW5nZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAt
LWNoaWxkVmVjdG9ySW5kZXg7CiAgICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9p
bXBvcnRSdWxlcy5zaXplKCkpIHsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3Rvcklu
ZGV4XS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgICAgIG1faW1wb3J0UnVsZXMucmVt
b3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAgIHN0
eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2hpbGRWZWN0
b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKIAogICAgIG1fY2hpbGRSdWxlcy5yZW1v
dmUoY2hpbGRWZWN0b3JJbmRleCk7Ci0KLXN1Y2Nlc3M6Ci0gICAgaWYgKCFtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
c1tpbmRleF0tPnNldFBhcmVudFN0eWxlU2hlZXQoMCk7Ci0gICAgICAgIG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5yZW1vdmUoaW5kZXgpOwotICAgIH0KLQogICAgIHN0eWxlU2hlZXRDaGFuZ2Vk
KCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6YWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQordm9p
ZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAo
dXJpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzcsNyArMjQzLDcgQEAgdm9pZCBD
U1NTdHlsZVNoZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFycwogICAgICAgICBwLT5tX2RlZmF1bHRO
YW1lc3BhY2UgPSB1cmk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVldDo6
ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQorY29uc3QgQXRv
bWljU3RyaW5nJiBTdHlsZVNoZWV0SW50ZXJuYWw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCkKIHsKICAgICBpZiAocHJlZml4LmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbnVsbEF0b207IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1
dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KQEAgLTM1MCwxMiArMjU2LDEy
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVldDo6ZGV0ZXIKICAgICByZXR1cm4g
bnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3b24ndCBtYXRjaCBhbnkgbmFtZXNwYWNlcy4KIH0KIAot
Ym9vbCBDU1NTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcgJnN0cmluZywgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorYm9vbCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
CiB7CiAgICAgcmV0dXJuIHBhcnNlU3RyaW5nQXRMaW5lKHN0cmluZywgY3NzUGFyc2VyTW9kZSwg
MCk7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTaGVldDo6cGFyc2VTdHJpbmdBdExpbmUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgaW50IHN0YXJ0TGluZU51
bWJlcikKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZShjb25zdCBT
dHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5l
TnVtYmVyKQogewogICAgIHNldENTU1BhcnNlck1vZGUoY3NzUGFyc2VyTW9kZSk7CiAgICAgQ1NT
UGFyc2VyIHAoY3NzUGFyc2VyTW9kZSk7CkBAIC0zNjMsNyArMjY5LDcgQEAgYm9vbCBDU1NTdHls
ZVNoZWV0OjpwYXJzZVN0cmluZ0F0TGluZShjbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IENTU1N0eWxlU2hlZXQ6OmlzTG9hZGluZygpCitib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6aXNM
b2FkaW5nKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbXBvcnRS
dWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pbXBvcnRSdWxlc1tpXS0+aXNMb2Fk
aW5nKCkpCkBAIC0zNzIsNyArMjc4LDcgQEAgYm9vbCBDU1NTdHlsZVNoZWV0Ojppc0xvYWRpbmco
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRl
ZCgpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6Y2hlY2tMb2FkZWQoKQogewogICAgIGlmIChp
c0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDggKzI4Niw4IEBAIHZvaWQgQ1NT
U3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQogICAgIC8vIEF2b2lkIHx0aGlzfCBiZWluZyBkZWxl
dGVkIGJ5IHNjcmlwdHMgdGhhdCBydW4gdmlhCiAgICAgLy8gU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpLgogICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vNjYyMjMwMD4uCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHByb3Rl
Y3Rvcih0aGlzKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0
eWxlU2hlZXQoKSkKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBwcm90ZWN0b3IodGhp
cyk7CisgICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxl
U2hlZXQoKSkKICAgICAgICAgc3R5bGVTaGVldC0+Y2hlY2tMb2FkZWQoKTsKIAogICAgIFJlZlB0
cjxOb2RlPiBvd25lciA9IG93bmVyTm9kZSgpOwpAQCAtMzk0LDUwICszMDAsNDMgQEAgdm9pZCBD
U1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2hl
ZXQ6Om5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqIHNoZWV0KQor
dm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6Om5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENT
U1N0eWxlU2hlZXQqIHNoZWV0KQogewogICAgIEFTU0VSVChzaGVldCk7CiAgICAgbV9kaWRMb2Fk
RXJyb3JPY2N1ciB8PSBzaGVldC0+ZXJyb3JPY2N1cnJlZCgpOwogfQogCi12b2lkIENTU1N0eWxl
U2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5h
bDo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkKIHsKICAgICBpZiAoTm9kZSogb3duZXIgPSBv
d25lck5vZGUoKSkKICAgICAgICAgb3duZXItPnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwog
fQogCi1Ob2RlKiBDU1NTdHlsZVNoZWV0OjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSgpIGNvbnN0
CitOb2RlKiBTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCkgY29u
c3QKIHsKLSAgICBmb3IgKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gdGhpczsgc2hlZXQ7
IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgeworICAgIGZvciAoY29uc3QgU3R5
bGVTaGVldEludGVybmFsKiBzaGVldCA9IHRoaXM7IHNoZWV0OyBzaGVldCA9IHNoZWV0LT5wYXJl
bnRTdHlsZVNoZWV0KCkpIHsKICAgICAgICAgaWYgKE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5v
d25lck5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBvd25lck5vZGU7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQogCi1Eb2N1bWVudCogQ1NTU3R5bGVTaGVldDo6ZmluZERvY3VtZW50KCkKK0Rv
Y3VtZW50KiBTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCgpCiB7CiAgICAgTm9kZSog
b3duZXJOb2RlID0gZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKIAogICAgIHJldHVybiBvd25l
ck5vZGUgPyBvd25lck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQotICAgIAotTWVkaWFMaXN0KiBD
U1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoteyAKLSAgICBpZiAoIW1fbWVkaWFRdWVyaWVz
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9tZWRpYVF1ZXJpZXMtPmVuc3VyZU1l
ZGlhTGlzdChjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlzKSk7Ci19CiAKLXZvaWQgQ1NT
U3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWFRdWVyaWVzKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyhQYXNz
UmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKIHsKICAgICBtX21lZGlhUXVlcmll
cyA9IG1lZGlhUXVlcmllczsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hh
bmdlZCgpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6c3R5bGVTaGVldENoYW5nZWQoKQogewot
ICAgIENTU1N0eWxlU2hlZXQqIHJvb3RTaGVldCA9IHRoaXM7Ci0gICAgd2hpbGUgKENTU1N0eWxl
U2hlZXQqIHBhcmVudCA9IHJvb3RTaGVldC0+cGFyZW50U3R5bGVTaGVldCgpKQorICAgIFN0eWxl
U2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gdGhpczsKKyAgICB3aGlsZSAoU3R5bGVTaGVldElu
dGVybmFsKiBwYXJlbnQgPSByb290U2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkKICAgICAgICAg
cm9vdFNoZWV0ID0gcGFyZW50OwogCiAgICAgLyogRklYTUU6IFdlIGRvbid0IG5lZWQgdG8gZG8g
ZXZlcnl0aGluZyB1cGRhdGVTdHlsZVNlbGVjdG9yIGRvZXMsCkBAIC00NDcsOCArMzQ2LDE5IEBA
IHZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5nZWQoKQogICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnRUb1VwZGF0ZSA9IHJvb3RTaGVldC0+ZmluZERvY3VtZW50KCkpCiAgICAgICAg
IGRvY3VtZW50VG9VcGRhdGUtPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUp
OwogfQorICAgIAorS1VSTCBTdHlsZVNoZWV0SW50ZXJuYWw6OmJhc2VVUkwoKSBjb25zdAorewor
ICAgIGlmICghbV9maW5hbFVSTC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fZmluYWxVUkw7
CisgICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNo
ZWV0KCkpCisgICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFzZVVSTCgpOworICAgIGlmICgh
bV9vd25lck5vZGUpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgcmV0dXJuIG1fb3duZXJO
b2RlLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7Cit9CiAKLUtVUkwgQ1NTU3R5bGVTaGVldDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CitLVVJMIFN0eWxlU2hlZXRJbnRlcm5h
bDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlz
IHJldHVybiBhIG51bGwgVVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBzdHJpbmcuCiAgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJl
aGF2aW9yPwpAQCAtNDYxLDEzICszNzEsMTMgQEAgS1VSTCBDU1NTdHlsZVNoZWV0Ojpjb21wbGV0
ZVVSTChjb25zdCBTdAogICAgIHJldHVybiBLVVJMKGJhc2VVUkwoKSwgdXJsLCBlbmNvZGluZyk7
CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mIHVybHMpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCiB7Ci0gICAgRGVxdWU8Q1NTU3R5
bGVTaGVldCo+IHN0eWxlU2hlZXRRdWV1ZTsKKyAgICBEZXF1ZTxTdHlsZVNoZWV0SW50ZXJuYWwq
PiBzdHlsZVNoZWV0UXVldWU7CiAgICAgc3R5bGVTaGVldFF1ZXVlLmFwcGVuZCh0aGlzKTsKIAog
ICAgIHdoaWxlICghc3R5bGVTaGVldFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VGaXJzdCgpOworICAgICAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0UXVldWUudGFrZUZp
cnN0KCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVT
aGVldC0+bV9pbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgU3R5bGVSdWxl
SW1wb3J0KiBpbXBvcnRSdWxlID0gc3R5bGVTaGVldC0+bV9pbXBvcnRSdWxlc1tpXS5nZXQoKTsK
QEAgLTQ4NiwyNSArMzk2LDE1MyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNl
U3R5bGVVCiAgICAgfQogfQogCi1DU1NJbXBvcnRSdWxlKiBDU1NTdHlsZVNoZWV0OjplbnN1cmVD
U1NPTVdyYXBwZXIoU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlKQorU3R5bGVTaGVldEludGVy
bmFsKiBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoreworICAg
IHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAw
OworfQorCitDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBzdHlsZVNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpCisgICAgOiBt
X2ludGVybmFsKHN0eWxlU2hlZXQpCisgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCisgICAgLCBt
X293bmVyUnVsZShvd25lclJ1bGUpCiB7Ci0gICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICBpZiAobV9pbXBvcnRSdWxlc1tp
XSA9PSBpbXBvcnRSdWxlKQotICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NJbXBv
cnRSdWxlKj4oaXRlbShpKSk7Ci0gICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gMDsKIH0KIAotQ1NTSW1wb3J0UnVsZSogQ1NTU3R5bGVTaGVldDo6b3duZXJSdWxl
KCkgY29uc3QgCi17ICAKLSAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpID8gcGFyZW50U3R5
bGVTaGVldCgpLT5lbnN1cmVDU1NPTVdyYXBwZXIobV9vd25lclJ1bGUpIDogMDsgCitDU1NTdHls
ZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCgpCit7CisgICAgLy8gRm9yIHN0eWxlIHJ1bGVzIG91dHNp
ZGUgdGhlIGRvY3VtZW50LCAucGFyZW50U3R5bGVTaGVldCBjYW4gYmVjb21lIG51bGwgZXZlbiBp
ZiB0aGUgc3R5bGUgcnVsZQorICAgIC8vIGlzIHN0aWxsIG9ic2VydmFibGUgZnJvbSBKYXZhU2Ny
aXB0LiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIC5wYXJlbnROb2RlIGZvciBub2Rlcywg
YnV0CisgICAgLy8gaXQncyBub3QgaWRlYWwgYmVjYXVzZSBpdCBtYWtlcyB0aGUgQ1NTT00ncyBi
ZWhhdmlvciBkZXBlbmQgb24gdGhlIHRpbWluZyBvZiBnYXJiYWdlIGNvbGxlY3Rpb24uCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAg
ICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQYXJlbnRTdHlsZVNoZWV0KDAp
OworICAgIH0KIH0KIAotQ1NTU3R5bGVTaGVldCogQ1NTU3R5bGVTaGVldDo6cGFyZW50U3R5bGVT
aGVldCgpIGNvbnN0Cit2b2lkIENTU1N0eWxlU2hlZXQ6OnNldERpc2FibGVkKGJvb2wgYikKK3sg
CisgICAgaWYgKGIgPT0gbV9pc0Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0Rp
c2FibGVkID0gYjsgCisgICAgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsKK30KKwor
dW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXND
U1NTdHlsZVNoZWV0KCkpOwotICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCkgOiAwOworICAgIHJldHVybiBtX2ludGVybmFsLT5ydWxlQ291bnQo
KTsKK30KKworQ1NTUnVsZSogQ1NTU3R5bGVTaGVldDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBsZW5ndGgoKTsKKyAgICBpZiAoaW5kZXggPj0gcnVs
ZUNvdW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3Jh
cHBlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuZ3Jvdyhy
dWxlQ291bnQpOworICAgIEFTU0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09
IHJ1bGVDb3VudCk7CisgICAgCisgICAgUmVmUHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XTsKKyAgICBpZiAoIWNzc1J1bGUpCisgICAgICAgIGNz
c1J1bGUgPSBtX2ludGVybmFsLT5jcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIoaW5kZXgsIHRo
aXMpOworICAgIHJldHVybiBjc3NSdWxlLmdldCgpOworfQorCitQYXNzUmVmUHRyPENTU1J1bGVM
aXN0PiBDU1NTdHlsZVNoZWV0OjpydWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBtX2ludGVybmFs
LT5maW5hbFVSTCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faW50ZXJuYWwtPmZpbmRE
b2N1bWVudCgpOworICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgLy8gSUUgYmVoYXZpb3IuCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBub25D
aGFyc2V0UnVsZXMgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgdW5zaWduZWQg
cnVsZUNvdW50ID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVD
b3VudDsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBp
ZiAocnVsZS0+aXNDaGFyc2V0UnVsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG5vbkNoYXJzZXRSdWxlcy0+cnVsZXMoKS5hcHBlbmQocnVsZSk7CisgICAgfQorICAgIHJldHVy
biBub25DaGFyc2V0UnVsZXMucmVsZWFzZSgpOworfQorCit1bnNpZ25lZCBDU1NTdHlsZVNoZWV0
OjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVN0cmluZywgdW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPiBsZW5ndGgo
KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgQ1NTUGFyc2VyIHAobV9pbnRlcm5hbC0+Y3NzUGFyc2VyTW9kZSgpKTsKKyAgICBS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSA9IHAucGFyc2VSdWxlKG1faW50ZXJuYWwuZ2V0KCks
IHJ1bGVTdHJpbmcpOworCisgICAgaWYgKCFydWxlKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGJvb2wgc3VjY2VzcyA9IG1faW50ZXJu
YWwtPndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0gICAgICAgIAorICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHko
KSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmluc2VydChpbmRleCwgUmVmUHRy
PENTU1J1bGU+KCkpOworICAgIHJldHVybiBpbmRleDsKK30KKworaW50IENTU1N0eWxlU2hlZXQ6
OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsg
IiB7ICIgKyBzdHlsZSArICIgfSIsIGluZGV4LCBlYyk7CisgICAgCisgICAgLy8gQXMgcGVyIE1p
Y3Jvc29mdCBkb2N1bWVudGF0aW9uLCBhbHdheXMgcmV0dXJuIC0xLgorICAgIHJldHVybiAtMTsK
K30KKworaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
Y29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGFk
ZFJ1bGUoc2VsZWN0b3IsIHN0eWxlLCBsZW5ndGgoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBDU1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBt
X2ludGVybmFsLT5maW5hbFVSTCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faW50ZXJu
YWwtPmZpbmREb2N1bWVudCgpOworICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAm
JiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCFtX3J1bGVMaXN0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3J1
bGVMaXN0Q1NTT01XcmFwcGVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2hlZXRDU1NSdWxlTGlzdCh0
aGlzKSk7CisgICAgcmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7Cit9CisKK3Zv
aWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7CisgICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbnRlcm5hbC0+d3Jh
cHBlckRlbGV0ZVJ1bGUoaW5kZXgpOworCisgICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBl
cnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0t
PnNldFBhcmVudFN0eWxlU2hlZXQoMCk7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
cy5yZW1vdmUoaW5kZXgpOworICAgIH0KK30KKworTWVkaWFMaXN0KiBDU1NTdHlsZVNoZWV0Ojpt
ZWRpYSgpIGNvbnN0IAoreyAKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1lZGlhUXVlcmllcygpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bWVkaWFRdWVyaWVzKCkt
PmVuc3VyZU1lZGlhTGlzdChjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlzKSk7Cit9CisK
K0NTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCAK
K3sgCisgICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKSA6IDA7IAorfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01X
cmFwcGVycygpCit7CisgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmNsZWFyKCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTEzNjU3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBDU1NJ
bXBvcnRSdWxlOwogY2xhc3MgQ1NTUGFyc2VyOwogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1J1
bGVMaXN0OworY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7
CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIERvY3VtZW50OwpAQCAtNDEsNTMg
KzQyLDQxIEBAIHN0cnVjdCBDU1NOYW1lc3BhY2U7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7CitjbGFzcyBT
dHlsZVNoZWV0SW50ZXJuYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0SW50ZXJuYWw+
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUo
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVJbXBvcnQqPigwKSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlSW1wb3J0Kj4oMCksIFN0cmluZygpLCBLVVJMKCksIFN0cmluZygpKSk7CiAgICAg
fQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBvd25l
ck5vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGUo
Tm9kZSogb3duZXJOb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NT
dHlsZVNoZWV0KG93bmVyTm9kZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJOb2RlLCBTdHJp
bmcoKSwgS1VSTCgpLCBTdHJpbmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBjcmVhdGUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKE5vZGUqIG93bmVy
Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q1NTU3R5bGVTaGVldChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hlZXRJbnRlcm5hbChvd25lck5v
ZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkpOwogICAgIH0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1
bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJSdWxl
LCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxV
UkwsIGNoYXJzZXQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gY3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmluYWxVUkwpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGVJbmxpbmUoTm9k
ZSogb3duZXJOb2RlLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIGZpbmFsVVJMLnN0cmluZygp
LCBmaW5hbFVSTCwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHls
ZVNoZWV0SW50ZXJuYWwob3duZXJOb2RlLCBmaW5hbFVSTC5zdHJpbmcoKSwgZmluYWxVUkwsIFN0
cmluZygpKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q1NTU3R5bGVTaGVldCgpOwotCi0gICAg
dmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREU7
Ci0KLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwotICAgIHVuc2lnbmVk
IGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgLy8gSUUgRXh0ZW5zaW9ucwotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHJ1bGVzKCk7Ci0gICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3Qg
U3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50IGFkZFJ1
bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgflN0eWxlU2hlZXRJbnRlcm5h
bCgpOwogCiAgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKTsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CiAK
ICAgICB2b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpOworICAg
IGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmlj
dE1vZGUpOwogCiAgICAgYm9vbCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmLCBDU1NQ
YXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0xv
YWRpbmcoKTsKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwogCiAgICAgdm9pZCBjaGVja0xv
YWRlZCgpOwogICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CkBAIC0xMTUsMzgg
KzEwNCw1MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyUnVsZXMoKTsKIAotICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwot
CiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hhcnNldCBhbmQgQGltcG9ydC4KICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkUnVsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUlt
cG9ydD4gPiYgaW1wb3J0UnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1bGVzOyB9CiAK
LSAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsKLQogICAgIE1l
ZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVz
LmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5
U2V0Pik7CiAKICAgICB2b2lkIG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxl
U2hlZXQqKTsKICAgICAKLSAgICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5bGVTaGVldCgp
IGNvbnN0OworICAgIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJOb2Rl
OyB9CisgICAgdm9pZCBjbGVhck93bmVyTm9kZSgpIHsgbV9vd25lck5vZGUgPSAwOyB9CisgICAg
U3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyUnVsZTsg
fQogICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQogICAgIAot
ICAgIENTU0ltcG9ydFJ1bGUqIGVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJbXBvcnQqKTsK
KyAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRlZCB0aGUgcmVkaXJl
Y3QgY2hhaW4gdGhhdCBsZWQgdG8KKyAgICAvLyB0aGlzIHN0eWxlIHNoZWV0LiBUaGlzIHByb3Bl
cnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKKyAgICAvLyB0aGUgSmF2
YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1ZSBmb3Igc2VjdXJp
dHkpLgorICAgIFN0cmluZyBvcmlnaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxV
Ukw7IH0KKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAg
dm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRsZTsgfQor
ICAgIAorICAgIHZvaWQgc2V0RmluYWxVUkwoY29uc3QgS1VSTCYgZmluYWxVUkwpIHsgbV9maW5h
bFVSTCA9IGZpbmFsVVJMOyB9CisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbmFsVVJMOyB9CisgICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgQ1NTU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotICAg
IENTU1N0eWxlU2hlZXQoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYg
b3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
OworICAgIHVuc2lnbmVkIHJ1bGVDb3VudCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgd3JhcHBl
ckluc2VydFJ1bGUoUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGluZGV4KTsK
KyAgICB2b2lkIHdyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KTsKIAotICAgIHZpcnR1
YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2NzcyI7IH0KKyAgICBQYXNz
UmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRl
eCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3JhcHBlcik7CisKK3ByaXZhdGU6CisgICAgU3R5bGVT
aGVldEludGVybmFsKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwg
Y29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CisgICAgU3R5bGVT
aGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9y
aWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsK
ICAgICAKICAgICB2b2lkIGNsZWFyQ2hhcnNldFJ1bGUoKTsKICAgICBib29sIGhhc0NoYXJzZXRS
dWxlKCkgY29uc3QgeyByZXR1cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxsKCk7
IH0KIAotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVy
KHVuc2lnbmVkIGluZGV4KTsKLQorICAgIE5vZGUqIG1fb3duZXJOb2RlOwogICAgIFN0eWxlUnVs
ZUltcG9ydCogbV9vd25lclJ1bGU7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5hbFVSTDsKKyAgICBL
VVJMIG1fZmluYWxVUkw7CisgICAgU3RyaW5nIG1fdGl0bGU7CisKICAgICBTdHJpbmcgbV9lbmNv
ZGluZ0Zyb21DaGFyc2V0UnVsZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4g
PiBtX2ltcG9ydFJ1bGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiBtX2No
aWxkUnVsZXM7CkBAIC0xNTksNyArMTYzLDYyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVXNl
clN0eWxlU2hlZXQgOiAxOwogICAgIGJvb2wgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFk
ZXIgOiAxOwogICAgIGJvb2wgbV9kaWRMb2FkRXJyb3JPY2N1ciA6IDE7Cit9OworCitjbGFzcyBD
U1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiBzaGVldCwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlID0gMCkgCisgICAgeyAKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LCBvd25lclJ1bGUpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5DU1NTdHlsZVNoZWV0KCk7CisKKyAgICB2aXJ0dWFsIENTU1N0
eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPm93
bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aW50ZXJuYWwtPm9yaWdpbmFsVVJMKCk7IH0gIAorICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+dGl0bGUoKTsgfQorICAgIHZpcnR1
YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNEaXNhYmxlZDsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sIGIpIE9WRVJSSURFOworICAgIAor
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQgaW5z
ZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7
CisgICAgCisgICAgLy8gSUUgRXh0ZW5zaW9ucworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHJ1bGVzKCk7CisgICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3Qg
U3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50IGFkZFJ1
bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgCisgICAgLy8gRm9yIENTU1J1
bGVMaXN0LgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIENTU1J1bGUqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZF
UlJJREUgeyBtX2ludGVybmFsLT5jbGVhck93bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBDU1NJ
bXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyUnVs
ZTsgfQorICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9pbnRlcm5hbC0+YmFzZVVSTCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmlzTG9hZGluZygpOyB9CisgICAgCisg
ICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CisgICAgdm9pZCBz
dHlsZVNoZWV0Q2hhbmdlZCgpIHsgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsgfQor
ICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSB7IHJldHVybiBtX2ludGVybmFsLT5maW5kRG9j
dW1lbnQoKTsgfQorICAgIAorICAgIHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7
CisKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcm5hbC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENTU1N0eWxlU2hlZXQoUGFzc1JlZlB0
cjxTdHlsZVNoZWV0SW50ZXJuYWw+LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpOworCisgICAg
dmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQorICAg
IAorICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1faW50ZXJuYWw7CisgICAgYm9vbCBt
X2lzRGlzYWJsZWQ7CiAKKyAgICBDU1NJbXBvcnRSdWxlKiBtX293bmVyUnVsZTsKICAgICBtdXRh
YmxlIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnM7CiAg
ICAgbXV0YWJsZSBPd25QdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3RDU1NPTVdyYXBwZXI7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3
IEBAIENTU1ZhbHVlOjpUeXBlIENTU1ZhbHVlOjpjc3NWYWx1ZVR5cGUoKSAKICAgICByZXR1cm4g
Q1NTX0NVU1RPTTsKIH0KIAotdm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMo
TGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQp
Cit2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJM
PiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewogICAgIC8v
IFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAg
IEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAkocmV2aXNp
b24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NT
dHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogICAgIAogLy8gRklYTUU6IFRo
ZSBjdXJyZW50IENTU1ZhbHVlIGFuZCBzdWJjbGFzc2VzIHNob3VsZCBiZSB0dXJuZWQgaW50byBp
bnRlcm5hbCB0eXBlcyAoU3R5bGVWYWx1ZSkuCiAvLyBUaGUgZmV3IHN1YnR5cGVzIHRoYXQgYXJl
IGFjdHVhbGx5IGV4cG9zZWQgaW4gQ1NTT00gY2FuIGJlIHNlZW4gaW4gdGhlIGNsb25lRm9yQ1NT
T00oKSBmdW5jdGlvbi4KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBjbG9uZUZvckNTU09NKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCop
OworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBj
b25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogcHJvdGVjdGVkOgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBA
QCBTdHJpbmcgQ1NTVmFsdWVMaXN0OjpjdXN0b21Dc3NUZXh0KCkgY29uCiAgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlz
dEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVl
dCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJ
KHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3Vz
dG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhM
aXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldElu
dGVybmFsKik7CiAgICAgCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNsb25lRm9yQ1NT
T00oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAJKHJldmlz
aW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTVmFsdWVQbwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJp
bmcmIHN0cmluZywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitQYXNzUmVmUHRy
PENTU1ZhbHVlTGlzdD4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KQogewogICAgIC8vIEp1c3Qgd2lwZSBvdXQgdGhlIGNhY2hlIGFuZCBzdGFydCByZWJ1aWxkaW5n
IGlmIGl0IGdldHMgdG9vIGJpZy4KICAgICBjb25zdCBpbnQgbWF4aW11bUZvbnRGYWNlQ2FjaGVT
aXplID0gMTI4OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkocmV2aXNpb24gMTEz
NjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMCArMzYsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTVmFs
dWVMaXN0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogCiBjbGFzcyBDU1NWYWx1ZVBvb2wg
ewogcHVibGljOgotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjcmVhdGVGb250RmFjZVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0
KTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZhY2VWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KTsK
ICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVGb250RmFtaWx5VmFsdWUo
Y29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxDU1NJbmhlcml0ZWRWYWx1ZT4gY3JlYXRl
SW5oZXJpdGVkVmFsdWUoKSB7IHJldHVybiBtX2luaGVyaXRlZFZhbHVlOyB9CiAgICAgUGFzc1Jl
ZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkgeyByZXR1
cm4gbV9pbXBsaWNpdEluaXRpYWxWYWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEx
MzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb246OnNldAogI2VuZGlmCiAgICAgZWMgPSAwOwogICAgIC8vIEZJ
WE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIG1fcHJvcGVydHlTZXQt
PnBhcnNlRGVjbGFyYXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisgICAgbV9wcm9w
ZXJ0eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgpLT5pbnRl
cm5hbCgpKTsKIAogICAgIGRpZE11dGF0ZSgpOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OnNldAogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CiAgICAgZWMgPSAwOwotICAg
IGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOworICAgIGJvb2wgY2hhbmdlZCA9
IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQs
IGNvbnRleHRTdHlsZVNoZWV0KCktPmludGVybmFsKCkpOwogICAgIGlmIChjaGFuZ2VkKSB7CiAg
ICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBhcnNpbmcg
ZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAogICAg
ICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY+
LgpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpzZXQKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlz
KTsKICNlbmRpZgogICAgIGVjID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0
LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVT
aGVldCgpKTsKKyAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpLT5pbnRlcm5h
bCgpKTsKICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTEzNjU3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q1NTUnVsZTsKIGNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNz
IENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRl
cm5hbDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0
LDcgKzQ4NCw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2kKICAg
ICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7CiB9CiAK
LWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCog
Y29udGV4dFN0eWxlU2hlZXQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gU2V0
dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVy
dHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1z
IHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0
IHRoZSBzYW1lLgpAQCAtNTMxLDcgKzUzMSw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0
UHJvcGVydHkoQ1NTUHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVByb3BlcnR5
U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgQ1NT
U3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBh
cnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHlsZVNoZWV0
SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1fcHJvcGVydGllcy5jbGVhcigp
OwogICAgIENTU1BhcnNlciBwYXJzZXIoY3NzUGFyc2VyTW9kZSgpKTsKQEAgLTc5Myw3ICs3OTMs
NyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAgfQogfQog
Ci12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3ZvaWQg
U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mIHVybHMsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAg
c2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5o
CShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xh
c3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIAog
Y2xhc3MgU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJvcGVydHlT
ZXQ+IHsKIHB1YmxpYzoKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm9w
ZXJ0eUltcGxpY2l0KENTU1Byb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgZXhwYW5k
IHNob3J0aGFuZCBwcm9wZXJ0aWVzIGludG8gbXVsdGlwbGUgcHJvcGVydGllcy4KLSAgICBib29s
IHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50ID0gZmFsc2UsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7Cisg
ICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNo
ZWV0ID0gMCk7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBkbyBu
b3QuIEZJWE1FOiBUaGlzIGlzIHRvbyBtZXNzeSwgd2UgY2FuIGRvIGJldHRlci4KQEAgLTc3LDcg
Kzc4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7CiAKLSAgICB2b2lkIHBhcnNlRGVjbGFyYXRp
b24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCk7CisgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5
bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAK
ICAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqLCBpbnQgbnVt
UHJvcGVydGllcyk7CiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0
eSYpOwpAQCAtOTEsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDU1NQYXJzZXJNb2Rl
KENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkgeyBtX2Nzc1BhcnNlck1vZGUgPSBjc3NQYXJz
ZXJNb2RlOyB9CiAgICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyTW9kZT4obV9jc3NQYXJzZXJNb2RlKTsgfQogCi0gICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIENTU1N0eWxl
U2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVT
aGVldCk7CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBjb25zdDsK
ICAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVz
KCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDQ5ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXQu
aCIKIAotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU3R5bGVTaGVldDo6U3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBj
b25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAgICA6IG1f
ZGlzYWJsZWQoZmFsc2UpCi0gICAgLCBtX293bmVyTm9kZShwYXJlbnROb2RlKQotICAgICwgbV9v
cmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCi17Ci19
Ci0KLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29u
c3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9vd25l
ck5vZGUoMCkKLSAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBtX2ZpbmFs
VVJMKGZpbmFsVVJMKQotewotfQotCiBTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCiB7CiB9CiAK
LUtVUkwgU3R5bGVTaGVldDo6YmFzZVVSTCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZpbmFsVVJM
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9maW5hbFVSTDsKLSAgICBpZiAoU3R5bGVTaGVl
dCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVybiBwYXJl
bnRTaGVldC0+YmFzZVVSTCgpOwotICAgIGlmICghbV9vd25lck5vZGUpCi0gICAgICAgIHJldHVy
biBLVVJMKCk7Ci0gICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7
Ci19Ci0KLXZvaWQgU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAg
ICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOwotICAgICBpZiAoaXNDU1NTdHlsZVNoZWV0KCkpCi0g
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4odGhpcyktPnN0eWxlU2hlZXRDaGFu
Z2VkKCk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTEz
NjU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzksNDggKzM5LDIxIEBAIGNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHkK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7CiAKLSAgICBib29sIGRpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9v
bCk7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZTsg
fQotICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJOb2RlID0gMDsgfQotCi0gICAg
dmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0K
KyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldERpc2FibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQg
c3RhcnRlZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KLSAgICAvLyB0aGlzIHN0eWxl
IHNoZWV0LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNl
cHQKLSAgICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhp
cyB2YWx1ZSBmb3Igc2VjdXJpdHkpLgotICAgIGNvbnN0IFN0cmluZyYgaHJlZigpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KLQotICAgIHZvaWQgc2V0RmluYWxVUkwoY29uc3QgS1VS
TCYgZmluYWxVUkwpIHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9Ci0gICAgY29uc3QgS1VSTCYg
ZmluYWxVUkwoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9Ci0KLSAgICBjb25zdCBTdHJp
bmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJUaXRsZTsgfQotICAgIHZvaWQgc2V0VGl0
bGUoY29uc3QgU3RyaW5nJiBzKSB7IG1fc3RyVGl0bGUgPSBzOyB9CisgICAgdmlydHVhbCBTdHJp
bmcgaHJlZigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0K
ICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c0xvYWRpbmcoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpID0gMDsKIAorICAgIHZpcnR1YWwg
Q1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgdm9pZCBjbGVhck93bmVyTm9kZSgpID0gMDsKKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotCi0gICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHlsZVNo
ZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBmaW5h
bFVSTCk7Ci0gICAgU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGZp
bmFsVVJMKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fZGlzYWJsZWQ7Ci0gICAgTm9kZSogbV9v
d25lck5vZGU7Ci0gICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7Ci0gICAgS1VSTCBtX2ZpbmFsVVJM
OwotICAgIFN0cmluZyBtX3N0clRpdGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9u
IDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDggKzEwOSw5IEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZTo6aW5zZXJ0UnVsZSgKIHsKICAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzLnNpemUoKSA9PSBtX2tleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpLnNpemUoKSk7CiAKLSAg
ICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKCkpOwotICAgIFJlZlB0cjxTdHlsZUtleWZyYW1l
PiBrZXlmcmFtZSA9IHAucGFyc2VLZXlmcmFtZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxl
VGV4dCk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQo
KTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5pbnRlcm5h
bCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBDU1NTdHJpY3RNb2RlKTsKKyAgICBSZWZQdHI8U3R5bGVL
ZXlmcmFtZT4ga2V5ZnJhbWUgPSBwYXJzZXIucGFyc2VLZXlmcmFtZVJ1bGUoc3R5bGVTaGVldCA/
IHN0eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlVGV4dCk7CiAgICAgaWYgKCFrZXlmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVt
ZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsOSBAQCBQYXNz
UmVmUHRyPENTU1N0eWxlU2hlZXQ+IERPTUltcGxlbWVudGF0CiB7CiAgICAgLy8gRklYTUU6IFRp
dGxlIHNob3VsZCBiZSBzZXQuCiAgICAgLy8gRklYTUU6IE1lZGlhIGNvdWxkIGhhdmUgd3Jvbmcg
c3ludGF4LCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uCi0g
ICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZSgpOwogICAgIHNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6
Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtZWRpYSkpOwotICAgIHJldHVybiBzaGVl
dC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVldCk7CiB9
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB2YWxpZFhNTE1JTUVUeXBlQ2hhcnMgPSAiWzAt
OWEtekEtWl9cXC0rfiEkXFxee318LiUnYCMmKl0iOyAvLyBwZXIgUkZDczogMzAyMywgMjA0NQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQog
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0yNTU2LDcgKzI1NTYsNyBAQCB2b2lkIERvY3VtZW50
Ojp1cGRhdGVCYXNlVVJMKCkKICAgICAgICAgbV9iYXNlVVJMID0gS1VSTCgpOwogCiAgICAgaWYg
KG1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldC0+c2V0RmluYWxVUkwobV9iYXNlVVJM
KTsKKyAgICAgICAgbV9lbGVtU2hlZXQtPmludGVybmFsKCktPnNldEZpbmFsVVJMKG1fYmFzZVVS
TCk7CiAgICAgCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJh
c2VVUkwsIG1fYmFzZVVSTCkpIHsKICAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMg
YW55IHJlbGF0aXZlIHZpc2l0ZWQgbGlua3MuCkBAIC0yNjg3LDcgKzI2ODcsNyBAQCBib29sIERv
Y3VtZW50OjpjYW5CZUFjY2Vzc2VkQnlFdmVyeUFuY2VzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUNTU1N0eWxlU2hlZXQqIERvY3VtZW50OjpwYWdlVXNlclNoZWV0KCkKK1N0eWxlU2hlZXRJbnRl
cm5hbCogRG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQoKQogewogICAgIGlmIChtX3BhZ2VVc2VyU2hl
ZXQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CkBAIC0yNzAxLDcgKzI3
MDEsNyBAQCBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAogICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUgaXQuCi0g
ICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRoaXMsIHNl
dHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CisgICAgbV9wYWdlVXNlclNoZWV0
ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3MoKS0+dXNl
clN0eWxlU2hlZXRMb2NhdGlvbigpKTsKICAgICBtX3BhZ2VVc2VyU2hlZXQtPnNldElzVXNlclN0
eWxlU2hlZXQodHJ1ZSk7CiAgICAgbV9wYWdlVXNlclNoZWV0LT5wYXJzZVN0cmluZyh1c2VyU2hl
ZXRUZXh0LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAgICAgcmV0
dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKQEAgLTI3MjIsNyArMjcyMiw3IEBAIHZvaWQgRG9j
dW1lbnQ6OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQogICAgICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdl
ZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0Citjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91
cFVzZXJTaGVldHMoKSBjb25zdAogewogICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVldENhY2hl
VmFsaWQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VHcm91cFVzZXJTaGVldHMuZ2V0KCk7CkBAIC0y
NzQ3LDExICsyNzQ3LDExIEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiog
RG8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghVXNlckNvbnRl
bnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnModXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwg
c2hlZXQtPmJsYWNrbGlzdCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYXJzZWRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Kj4odGhpcyksIHNoZWV0LT51cmwoKSk7Cisg
ICAgICAgICAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBwYXJzZWRTaGVldCA9IFN0eWxl
U2hlZXRJbnRlcm5hbDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPih0aGlzKSwg
c2hlZXQtPnVybCgpKTsKICAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5zZXRJc1VzZXJTdHlsZVNo
ZWV0KHNoZWV0LT5sZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbCk7CiAgICAgICAgICAgICBw
YXJzZWRTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpLCBzdHJpY3RUb0NTU1BhcnNl
ck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcGFnZUdyb3VwVXNl
clNoZWV0cykKLSAgICAgICAgICAgICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KTsKKyAgICAgICAgICAgICAgICBt
X3BhZ2VHcm91cFVzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxTdHlsZVNo
ZWV0SW50ZXJuYWw+ID4pOwogICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzLT5hcHBl
bmQocGFyc2VkU2hlZXQucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3NzUsMTAg
KzI3NzUsMTAgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0cwogICAg
ICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gdXNl
clNoZWV0KQordm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiB1c2VyU2hlZXQpCiB7CiAgICAgaWYgKCFtX3VzZXJTaGVldHMpCi0gICAgICAg
IG1fdXNlclNoZWV0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4pOworICAgICAgICBtX3VzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAgIG1fdXNlclNoZWV0cy0+YXBwZW5kKHVzZXJTaGVl
dCk7CiAgICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9
CkBAIC0yNzg2LDcgKzI3ODYsNyBAQCB2b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQoUGFzc1Jl
ZlB0cjxDCiBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsKICAgICBp
ZiAoIW1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0
eWxlU2hlZXQ6OmNyZWF0ZShTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSh0aGlzLCBt
X2Jhc2VVUkwpKTsKICAgICByZXR1cm4gbV9lbGVtU2hlZXQuZ2V0KCk7CiB9CiAKQEAgLTMzMTUs
MTAgKzMzMTUsOCBAQCB2b2lkIERvY3VtZW50Ojpjb2xsZWN0QWN0aXZlU3R5bGVzaGVldHMoCiAg
ICAgfQogfQogCi1ib29sIERvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHls
ZVJlY2FsYyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0KQorYm9vbCBEb2N1bWVudDo6dGVzdEFk
ZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoU3R5bGVTaGVldEludGVybmFsKiBzdHls
ZXNoZWV0KQogewotICAgIGlmIChzdHlsZXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgLy8gU2VlIGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJlIHNjb3Bl
ZCB0byBzb21lIHNwZWNpZmljIGlkcyBvciBjbGFzc2VzLgogICAgIC8vIFRoZW4gdGVzdCBpZiB3
ZSBhY3R1YWxseSBoYXZlIGFueSBvZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9tZW50Lgog
ICAgIC8vIEZJWE1FOiBFdmVuIHdlIGlmIHdlIGZpbmQgc29tZSwgd2UgY291bGQganVzdCBpbnZh
bGlkYXRlIHRob3NlIHN1YnRyZWVzIGluc3RlYWQgb2YgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUg
c3R5bGUuCkBAIC0zMzkwLDcgKzMzODgsOSBAQCB2b2lkIERvY3VtZW50OjphbmFseXplU3R5bGVz
aGVldENoYW5nZShTCiAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENvdW50OyBp
IDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKICAgICAgICAgaWYgKCFuZXdTdHlsZXNoZWV0
c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
ICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2FzdDxDU1NT
dHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpKSkKKyAgICAgICAgaWYgKG5ld1N0
eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpLT5pbnRlcm5hbCgpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMgPSBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTM2NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgpAQCAtMTI3LDYgKzEyNyw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVT
aGVldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0Owog
Y2xhc3MgVGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CkBAIC02MjMsMTYgKzYyNCwx
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5OYXZpZ2F0ZShGcmFtZSogdGFyZ2V0RnJhbWUpOwog
ICAgIGJvb2wgY2FuQmVBY2Nlc3NlZEJ5RXZlcnlBbmNlc3RvckZyYW1lKCk7CiAKLSAgICBDU1NT
dHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYWdl
VXNlclNoZWV0KCk7CiAgICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICB2b2lkIHVw
ZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3Q7
CiAgICAgdm9pZCBjbGVhclBhZ2VHcm91cFVzZXJTaGVldHMoKTsKICAgICB2b2lkIHVwZGF0ZVBh
Z2VHcm91cFVzZXJTaGVldHMoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2hlZXRz
LmdldCgpOyB9Ci0gICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiB1c2VyU2hlZXQpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiA+KiBkb2N1bWVudFVzZXJTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTaGVldHMuZ2V0
KCk7IH0KKyAgICB2b2lkIGFkZFVzZXJTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5h
bD4gdXNlclNoZWV0KTsKIAogICAgIENTU1N0eWxlU2hlZXQqIGVsZW1lbnRTaGVldCgpOwogICAg
IApAQCAtMTE4MSw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIHVwZGF0ZUFj
dGl2ZVN0eWxlc2hlZXRzKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnKTsKICAgICB2b2lkIGNvbGxl
Y3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKLSAgICBi
b29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxlU2hlZXQq
KTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxl
U2hlZXRJbnRlcm5hbCopOwogICAgIHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UoU3R5bGVT
ZWxlY3RvclVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgbmV3
U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCBib29sJiByZXF1
aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIGRlbGV0ZUN1c3RvbUZvbnRzKCk7CkBA
IC0xMjU3LDkgKzEyNTgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNOb2Rlc1dpdGhQbGFj
ZWhvbGRlclN0eWxlOwogCiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fZWxlbVNoZWV0Owot
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VVc2VyU2hlZXQ7Ci0gICAgbXV0YWJsZSBP
d25QdHI8VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hl
ZXRzOwotICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gPiBtX3VzZXJT
aGVldHM7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbV9wYWdlVXNlclNoZWV0Owor
ICAgIG11dGFibGUgT3duUHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+ID4g
bV9wYWdlR3JvdXBVc2VyU2hlZXRzOworICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gPiA+IG1fdXNlclNoZWV0czsKICAgICBtdXRhYmxlIGJvb2wgbV9wYWdlR3Jv
dXBVc2VyU2hlZXRDYWNoZVZhbGlkOwogCiAgICAgYm9vbCBtX3ByaW50aW5nOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lvbiAxMTM2
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVE
YXRhLmgiCiAKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxl
bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04Miw3ICs4Myw3IEBAIHZvaWQgRWxl
bWVudEF0dHJpYnV0ZURhdGE6OnVwZGF0ZUlubGluZVMKICAgICAgICAgbV9pbmxpbmVTdHlsZURl
Y2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICAgICAgbV9pbmxpbmVTdHlsZURl
Y2wtPnNldENTU1BhcnNlck1vZGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKICAg
ICB9Ci0gICAgbV9pbmxpbmVTdHlsZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgIG1faW5saW5lU3R5bGVEZWNsLT5w
YXJzZURlY2xhcmF0aW9uKHRleHQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgp
LT5pbnRlcm5hbCgpKTsKIH0KIAogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlu
bGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMTEzNjU3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMSwxNSArMjExLDE2IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRDU1NT
dHlsZVMKICAgICB9CiAKICAgICBBU1NFUlQobV9pc0NTUyk7Ci0gICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IG5ld1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VV
UkwsIGNoYXJzZXQpOwotICAgIG1fc2hlZXQgPSBuZXdTaGVldDsKKyAgICBSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBuZXdTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMs
IGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0Ojpj
cmVhdGUobmV3U2hlZXQpOwogICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGNyb3NzLW9yaWdpbiBz
ZWN1cml0eSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgYXJlCiAgICAgLy8gZ2V0dGluZyB0aGUgc2hl
ZXQgdGV4dCBpbiAic3RyaWN0IiBtb2RlLiBUaGlzIGVuZm9yY2VzIGEgdmFsaWQgQ1NTIE1JTUUK
ICAgICAvLyB0eXBlLgotICAgIHBhcnNlU3R5bGVTaGVldChzaGVldC0+c2hlZXRUZXh0KHRydWUp
KTsKICAgICBuZXdTaGVldC0+c2V0VGl0bGUobV90aXRsZSk7CiAgICAgbmV3U2hlZXQtPnNldE1l
ZGlhUXVlcmllcyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUobV9tZWRpYSkpOwotICAgIG5ld1NoZWV0
LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisgICAgbV9zaGVldC0+c2V0RGlzYWJsZWQobV9h
bHRlcm5hdGUpOworCisgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQodHJ1ZSkp
OwogfQogCiAjaWYgRU5BQkxFKFhTTFQpCkBAIC0yMzMsNyArMjM0LDExIEBAIHZvaWQgUHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRYU0xTdHlsZVMKIAogdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OnBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KQogewotICAgIG1fc2hlZXQt
PnBhcnNlU3RyaW5nKHNoZWV0LCBDU1NTdHJpY3RNb2RlKTsKKyAgICBpZiAobV9pc0NTUykKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5pbnRlcm5h
bCgpLT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisgICAgZWxzZSBpZiAobV9p
c1hTTCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkp
LT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisKICAgICBpZiAobV9jYWNoZWRT
aGVldCkKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgIG1f
Y2FjaGVkU2hlZXQgPSAwOwpAQCAtMjQxLDcgKzI0Niw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpwYXJzZVN0eWxlU2gKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKIAogICAgIGlmICht
X2lzQ1NTKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obV9zaGVldC5nZXQo
KSktPmNoZWNrTG9hZGVkKCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPiht
X3NoZWV0LmdldCgpKS0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKICNpZiBFTkFCTEUoWFNM
VCkKICAgICBlbHNlIGlmIChtX2lzWFNMKQogICAgICAgICBzdGF0aWNfY2FzdDxYU0xTdHlsZVNo
ZWV0Kj4obV9zaGVldC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7CkBAIC0yNTMsOCArMjU4LDggQEAg
dm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxlUwogICAgIEFTU0VSVCghbV9j
YWNoZWRTaGVldCk7CiAgICAgQVNTRVJUKCFtX2xvYWRpbmcpOwogICAgIG1fc2hlZXQgPSBzaGVl
dDsKLSAgICBtX3NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKLSAgICBtX3NoZWV0LT5zZXREaXNh
YmxlZChtX2FsdGVybmF0ZSk7CisgICAgc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKG1fdGl0
bGUpOworICAgIHNoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CiB9CiAKIGJvb2wgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTYgKzE2
NCwxNyBAQCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAg
IGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSB8fCBwcmludEV2YWwuZXZh
bChtZWRpYVF1ZXJpZXMuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRkUGVuZGlu
Z1NoZWV0KCk7CiAgICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAgICAgICAgbV9z
aGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBkb2N1bWVu
dC0+aW5wdXRFbmNvZGluZygpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nQXRM
aW5lKHRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgp
KSwgc3RhcnRMaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldE1lZGlhUXVlcmll
cyhtZWRpYVF1ZXJpZXMucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxl
KGUtPnRpdGxlKCkpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5
bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKGUsIFN0cmluZygpLCBLVVJMKCks
IGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+cGFy
c2VTdHJpbmdBdExpbmUodGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVudC0+aW5R
dWlya3NNb2RlKCkpLCBzdGFydExpbmVOdW1iZXIpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+
c2V0TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOworICAgICAgICAgICAgc3R5
bGVTaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CisgICAgICAgICAgICBtX3NoZWV0ID0gQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQpOwogICAgICAgICAgICAgbV9sb2FkaW5nID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9zaGVldCkKLSAgICAgICAgbV9z
aGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgbV9zaGVldC0+aW50ZXJuYWwoKS0+Y2hlY2tM
b2FkZWQoKTsKIH0KIAogYm9vbCBTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM2NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
Niw3ICsyMDYsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVyCiAK
IGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewotICAg
IGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGlu
ZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBk
b2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlQXR0
cmlidXRlRGF0YSgpLT5lbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgp
LT5pbnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgaW5saW5lU3R5bGVDaGFu
Z2VkKCk7CiAgICAgcmV0dXJuIGNoYW5nZXM7CkBAIC0yMjYsNyArMjI2LDcgQEAgYm9vbCBTdHls
ZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVBybwogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7
CiAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKLSAgICAgICAgaW5saW5lU3R5
bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVl
dCgpKTsKKyAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMs
IGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIGF0dHJpYnV0ZU5hbWVTb3J0KGNvbnN0IHBhaXI8QXRvbWljU3RyaW5nSW1wbCos
IEF0b21pY1N0cmluZz4mIHAxLCBjb25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNT
dHJpbmc+JiBwMikKQEAgLTMzMyw1ICszMzMsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQ
cm9wZXJ0eVRvQXR0cmlidQogewogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQorICAgIAordm9pZCBT
dHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5bGVQcm9wZXJ0eVNl
dCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGZhbHNlLCBkb2N1
bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7Cit9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsNiBA
QCBpbmxpbmUgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6CiAgICAgcmV0dXJuIGF0
dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6IDA7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHls
ZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2
YWx1ZSwgZmFsc2UsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKLX0KLQogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5j
cHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xNzYsNyArMTc3LDcg
QEAgdm9pZCBIVE1MRm9udEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvckF0dAogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGNvbG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9yVG9TdHls
ZShzdHlsZSwgQ1NTUHJvcGVydHlDb2xvciwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGZhY2VBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhY2VWYWx1ZShh
dHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSkpCisgICAgICAgIGlmIChS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
Rm9udEZhY2VWYWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+
aW50ZXJuYWwoKSkpCiAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHko
Q1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250RmFjZVZhbHVlLnJlbGVhc2UoKSkpOwogICAgIH0g
ZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKGF0dHIs
IHN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShBdHQKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlz
LCBhdHRyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVB
dHRyICYmIG1fc2hlZXQpCi0gICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1
ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0dHItPnZh
bHVlKCkpOwogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CiAgICAg
fQogfQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHls
ZVNoZWV0KGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hlZXQgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgUmVmUHRy
PFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3Jl
YXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgYm9vbCBzdHJpY3RQYXJz
aW5nID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVU
eXBlID0gc3RyaWN0UGFyc2luZzsKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAjZW5kaWYKIAogICAgIFN0cmluZyBzaGVldFRleHQg
PSBzaGVldC0+c2hlZXRUZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUpOwotICAg
IG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKHN0
cmljdFBhcnNpbmcpKTsKKyAgICBzdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldFRleHQsIHN0
cmljdFRvQ1NTUGFyc2VyTW9kZShzdHJpY3RQYXJzaW5nKSk7CiAKICAgICAvLyBJZiB3ZSdyZSBs
b2FkaW5nIGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4sIGFuZCB0aGUgTUlNRSB0eXBlIGlzIG5v
dAogICAgIC8vIHN0YW5kYXJkLCByZXF1aXJlIHRoZSBDU1MgdG8gYXQgbGVhc3Qgc3RhcnQgd2l0
aCBhIHN5bnRhY3RpY2FsbHkKQEAgLTMxNiw4ICszMTYsOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KGJhc2VVUkwpKQogICAgICAgICBjcm9zc09yaWdpbkNTUyA9IHRydWU7
CiAKLSAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1fc2hlZXQt
Pmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3NoZWV0ID0gQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIGlm
IChjcm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhc3R5bGVTaGVldC0+aGFzU3lu
dGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCisgICAgICAgIHN0eWxlU2hlZXQgPSBTdHlsZVNo
ZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKIAogICAg
IGlmIChzdHJpY3RQYXJzaW5nICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAgICAgICAg
IC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgzNTA+LgpAQCAtMzI3LDIwICszMjcsMjAgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENT
U1N0eWxlU2hlZXQoYwogICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29u
ZCB0cmFpbGluZyBuZXdsaW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5lbmRzV2l0
aChzbGFzaEtIVE1MRml4ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFX
aWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAgICAgICAg
ICAgICAgJiYgc2hlZXRUZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNo
ZWV0Lmxlbmd0aCgpIC0gMSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPmxlbmd0aCgp
ID09IDEpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIG1fc2hl
ZXQtPmRlbGV0ZVJ1bGUoMCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlU2hlZXQtPnJ1
bGVDb3VudCgpID09IDEpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+Y2xlYXJSdWxlcygpOwog
ICAgICAgICB9CiAgICAgfQorICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5
bGVTaGVldCk7CiAKLSAgICBtX3NoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKKyAgICBzdHlsZVNo
ZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKIAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRp
YSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRp
YSk7Ci0gICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CisgICAg
c3R5bGVTaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CiAKICAgICBtX2xv
YWRpbmcgPSBmYWxzZTsKLSAgICBtX3NoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChzaGVldCk7Ci0g
ICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICBzdHlsZVNoZWV0LT5ub3RpZnlMb2FkZWRT
aGVldChzaGVldCk7CisgICAgc3R5bGVTaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBI
VE1MTGlua0VsZW1lbnQ6OnN0eWxlU2hlZXRJc0xvYWRpbmcoKSBjb25zdApAQCAtMzQ5LDcgKzM0
OSw3IEBAIGJvb2wgSFRNTExpbmtFbGVtZW50OjpzdHlsZVNoZWV0SXNMb2FkaW4KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgaWYgKCFtX3NoZWV0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fc2hlZXQtPmlzTG9hZGluZygpOworICAgIHJldHVybiBtX3NoZWV0LT5pbnRl
cm5hbCgpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OmxpbmtMb2Fk
ZWQoKQpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRTdWJyZXNv
dXJjZUF0dHIKICAgICAKICAgICAvLyBXYWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUgbGlua2Vk
LXRvIHN0eWxlc2hlZXQuCiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25z
dF9jYXN0PEhUTUxMaW5rRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNo
ZWV0LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+
aW50ZXJuYWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIHZvaWQgSFRN
TExpbmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQoUGVuZGluZ1NoZWV0VHlwZSB0eXBlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM2
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIFBhc3NSZWZQdHI8SFRNTFN0eWxlRWxlbWVudD4gSFRN
TFN0eWxlRWwKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQp
Ci0gICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX3No
ZWV0LT5pbnRlcm5hbCgpLT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIp
CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dAogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7
CiAKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8SFRNTFN0
eWxlRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5hZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVu
dDo6ZGlzYWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUq
IAogICAgICAgICAgICAgbWVkaWFMaXN0ID0gMDsKIAogICAgICAgICBpZiAocGFyZW50U3R5bGVT
aGVldCkgewotICAgICAgICAgICAgc291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVldC0+ZmluYWxV
UkwoKTsKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhcmVudFN0eWxlU2hlZXQtPmludGVybmFs
KCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICBpZiAoc291cmNlVVJMLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxT
dHJpbmcocGFyZW50U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkpOwogICAgICAgICB9IGVsc2UK
QEAgLTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVs
ZSogCiAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdHlsZVNoZWV0LT5maW5k
RG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRvYykKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9IGRvYy0+dXJsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCFzdHlsZVNoZWV0LT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmZpbmFsVVJMKCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVSTCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQt
PmludGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogICAgICAgICAgICAgICAgICAgICBt
ZWRpYUFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtlZFNoZWV0IDogTWVkaWFMaXN0
U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wg
SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnMKICAgICAgICAgUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KTsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1N0
eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIENTU1BhcnNlciBwOwotICAgICAgICBw
LnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsg
IiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5bGUt
PnBhcmVudFN0eWxlU2hlZXQoKSk7CisgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0
YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSAr
ICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5pbnRl
cm5hbCgpKTsKICAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5
RGF0YSA9IHNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJvcGVy
dHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKQEAgLTY4OSw4ICs2ODksOCBAQCBQYXNz
UmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvCiAvLyBzdGF0aWMKIFN0cmluZyBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0KQogewotICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPmZp
bmFsVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGFnZVN0eWxlU2hlZXQtPmZpbmFs
VVJMKCkuc3RyaW5nKCk7CisgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYWdl
U3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5zdHJpbmcoKTsKICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKIH0KIApAQCAtNzE4LDggKzcxOCw5IEBAIFN0cmluZyBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpmaW5hbFVSTCgpIGMKIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBh
cnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgbV9wYWdlU3R5bGVTaGVl
dC0+Y2xlYXJSdWxlcygpOwotICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQs
IG1fcGFnZVN0eWxlU2hlZXQtPmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxlcygpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmludGVy
bmFsKCktPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCktPmNz
c1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJDaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzKCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsK
ICAgICBtX2luc3BlY3RvclN0eWxlcy5jbGVhcigpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdl
ZCgpOwpAQCAtMTA4NywxNCArMTA4OCwxNCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVu
c3VyZVNvdXJjZURhCiAgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxl
U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKTsKICAg
ICBDU1NQYXJzZXIgcDsKICAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CiAgICAg
cC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4
dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKICAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291
cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3Vy
Y2VEYXRhKSk7CiAKICAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QobmV3U3R5bGVTaGVldC5nZXQo
KSk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QoQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKICAgICBjb2xsZWN0Rmxh
dFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VN
YXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxlUnVs
ZSgpKTsKQEAgLTE0MTQsNyArMTQxNSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjoKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFyYXRp
b24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcDsKLSAgICBw
LnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVz
dWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBwLnBhcnNl
RGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVzdWx0LCBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAJKHJldmlzaW9uIDExMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaAogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1f
cmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUg
d2FzIGZvdW5kIGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcoc3R5
bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50
b1N0cmluZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRl
eHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAko
cmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFNWR1N0eWxlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoQXR0CiAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0aXRsZUF0dHIpIHsKICAgICAgICAgaWYgKG1fc2hlZXQpCi0gICAgICAgICAgICBtX3NoZWV0
LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVybmFs
KCktPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDExMzY1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlv
bi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NjksMTAgKzY5LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25z
dCB7IHJldHVybiAidGV4dC94bWwiOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmco
Y29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZU1vZGUgPSBDU1NTdHJpY3RNb2Rl
KTsKKyAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VNb2RlID0gQ1NTU3RyaWN0TW9kZSk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzTG9h
ZGluZygpOworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2b2lkIGNo
ZWNrTG9hZGVkKCk7CisgICAgCisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbmFsVVJMOyB9CiAKICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOwogICAgIHZv
aWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKTsKQEAgLTgwLDcgKzgyLDcgQEAg
cHVibGljOgogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcigp
OwogCiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKTsKLSAgICBYU0xTdHlsZVNoZWV0KiBw
YXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9Cisg
ICAgdmlydHVhbCBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCBzZXRQYXJlbnRTdHls
ZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7CiAKICNpZiBVU0UoUVhNTFFVRVJZKQpAQCAt
OTUsMTIgKzk3LDI2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7CiAg
ICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNE
aXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sIGIpIE9WRVJSSURF
IHsgbV9pc0Rpc2FibGVkID0gYjsgfQorICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lck5vZGU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBo
cmVmKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vcmlnaW5hbFVSTDsgfQorICAgIHZpcnR1
YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZFUlJJREUgeyBtX293bmVy
Tm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fZmluYWxVUkw7IH0KIAogcHJpdmF0ZToKICAgICBYU0xTdHlsZVNoZWV0KE5vZGUq
IHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFs
VVJMLCBib29sIGVtYmVkZGVkKTsKICNpZiAhVVNFKFFYTUxRVUVSWSkKICAgICBYU0xTdHlsZVNo
ZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVS
TCwgY29uc3QgS1VSTCYgZmluYWxVUkwpOwogI2VuZGlmCisgICAgCisgICAgTm9kZSogbV9vd25l
ck5vZGU7CisgICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFsVVJMOwor
ICAgIGJvb2wgbV9pc0Rpc2FibGVkOwogCiAgICAgVmVjdG9yPE93blB0cjxYU0xJbXBvcnRSdWxl
PiA+IG1fY2hpbGRyZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0
TGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hl
ZXRMaWJ4c2x0LmNwcAkocmV2aXNpb24gMTEzNjU3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgogICoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC01NSw3ICs1NSwxMCBAQCBTT0ZUX0xJTksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0UEks
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNM
SW1wb3J0UnVsZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3Qg
S1VSTCYgZmluYWxVUkwpCi0gICAgOiBTdHlsZVNoZWV0KHN0YXRpY19jYXN0PE5vZGUqPigwKSwg
b3JpZ2luYWxVUkwsIGZpbmFsVVJMKQorICAgIDogbV9vd25lck5vZGUoMCkKKyAgICAsIG1fb3Jp
Z2luYWxVUkwob3JpZ2luYWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQorICAgICwg
bV9pc0Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9lbWJlZGRlZChmYWxzZSkKICAgICAsIG1fcHJv
Y2Vzc2VkKGZhbHNlKSAvLyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hl
biB0aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgogICAgICwgbV9zdHls
ZXNoZWV0RG9jKDApCkBAIC02NSw3ICs2OCwxMCBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNo
ZWV0KFhTTEltcG9ydFJ1CiB9CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9kZSog
cGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxV
UkwsICBib29sIGVtYmVkZGVkKQotICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBvcmlnaW5h
bFVSTCwgZmluYWxVUkwpCisgICAgOiBtX293bmVyTm9kZShwYXJlbnROb2RlKQorICAgICwgbV9v
cmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisgICAg
LCBtX2lzRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQogICAgICwg
bV9wcm9jZXNzZWQodHJ1ZSkgLy8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQu
CiAgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKQEAgLTg1LDcgKzkxLDcgQEAgWFNMU3R5bGVTaGVl
dDo6flhTTFN0eWxlU2hlZXQoKQogICAgIH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xv
YWRpbmcoKQorYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmIChtX2NoaWxkcmVuLmF0KGkpLT5pc0xvYWRpbmcoKSkK
</data>
<flag name="commit-queue"
          id="141456"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136666</attachid>
            <date>2012-04-11 07:27:44 -0700</date>
            <delta_ts>2012-04-11 08:12:57 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>stylesheet-internal-18.patch</filename>
            <type>text/plain</type>
            <size>120429</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3Rvcjogc2hvd2luZyBzdW1tYXJ5IHZpZXcgaXMgdmVyeSBzbG93IG9uIGEgc25h
cHNob3Qgd2l0aCB0aG91c2FuZHMgb2YgY29uc3RydWN0b3JzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFpc0xvY2FsKCkpCiAgICAgICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIHN0eWxlU2hlZXQtPmNvbXBsZXRlVVJMKG1fcmVzb3VyY2UpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9t
Q3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVy
bmFsKik7CiAKICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250KERvY3VtZW50Kik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTIgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTdHlsZVJ1
bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorUGFz
c1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKFN0eWxlU2hl
ZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFR
dWVyeVNldD4gbWVkaWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVJbXBv
cnQocGFyZW50LCBocmVmLCBtZWRpYSkpOwogfQogCi1TdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVs
ZUltcG9ydChDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKK1N0eWxlUnVsZUltcG9ydDo6U3R5bGVSdWxlSW1w
b3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NS
ZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKEltcG9ydCwg
MCkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVldChwYXJlbnQpCiAgICAgLCBtX3N0eWxlU2hlZXRD
bGllbnQodGhpcykKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENT
U1N0eWxlU2hlZXQoYwogewogICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVT
aGVldC0+Y2xlYXJPd25lclJ1bGUoKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgbV9zdHlsZVNoZWV0
ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNl
dCk7CiAKICAgICBib29sIGNyb3NzT3JpZ2luQ1NTID0gZmFsc2U7CiAgICAgYm9vbCB2YWxpZE1J
TUVUeXBlID0gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0Ojpz
ZXRDU1NTdHlsZVNoZWV0KGMKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwogCiAgICAg
aWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3N0eWxlU2hlZXQtPmhh
c1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3N0eWxlU2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
ICAgIG1fc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYs
IGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgaWYgKGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJz
ZXJNb2RlKSAmJiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykgewogICAgICAgICAvLyBXb3JrIGFy
b3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzUwPi4KQEAg
LTk4LDkgKzk4LDggQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwog
ICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXds
aW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4
ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0
eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAgICAgICAgICAgICAgJiYgc2hlZXRU
ZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0Lmxlbmd0aCgpIC0g
MSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc3R5bGVTaGVldC0+bGVuZ3RoKCkgPT0gMSk7Ci0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgbV9zdHlsZVNoZWV0LT5k
ZWxldGVSdWxlKDAsIGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0eWxlU2hlZXQtPmNoaWxk
UnVsZXMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBtX3N0eWxlU2hlZXQtPmNsZWFyUnVs
ZXMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM2LDggKzEzNSw4IEBAIHZvaWQgU3R5bGVS
dWxlSW1wb3J0OjpyZXF1ZXN0U3R5bGVTaGVldCgKIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xl
IGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAg
Ly8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwu
Ci0gICAgQ1NTU3R5bGVTaGVldCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OwotICAg
IGZvciAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBz
aGVldCA9IHNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKKyAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIHJvb3RTaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsKKyAgICBmb3IgKFN0eWxlU2hlZXRJ
bnRlcm5hbCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBzaGVldCA9IHNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmcg
aWYgdGhlIGZpbmFsVVJMIHdhcyB1cGRhdGVkIHZpYSBkb2N1bWVudDo6dXBkYXRlQmFzZVVSTC4K
ICAgICAgICAgaWYgKGFic0hyZWYgPT0gc2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNjYsNiArMTY1LDEyIEBAIENTU0ltcG9ydFJ1bGU6OkNTU0lt
cG9ydFJ1bGUoU3R5bGVSdWxlSW0KIHsKIH0KIAorQ1NTSW1wb3J0UnVsZTo6fkNTU0ltcG9ydFJ1
bGUoKQoreworICAgIGlmIChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlci0+Y2xlYXJPd25lclJ1bGUoKTsKK30KKwogTWVkaWFMaXN0KiBD
U1NJbXBvcnRSdWxlOjptZWRpYSgpCiB7CiAgICAgcmV0dXJuIG1faW1wb3J0UnVsZS0+bWVkaWFR
dWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChwYXJlbnRTdHlsZVNoZWV0KCkpOwpAQCAtMTg3LDQg
KzE5MiwxNSBAQCBTdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCitDU1NTdHlsZVNoZWV0KiBDU1NJbXBvcnRSdWxl
OjpzdHlsZVNoZWV0KCkgY29uc3QKK3sgCisgICAgaWYgKCFtX2ltcG9ydFJ1bGUtPnN0eWxlU2hl
ZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fc3R5bGVTaGVldENTU09NV3Jh
cHBlcikKKyAgICAgICAgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyID0gQ1NTU3R5bGVTaGVldDo6
Y3JlYXRlKG1faW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBjb25zdF9jYXN0PENTU0ltcG9ydFJ1
bGUqPih0aGlzKSk7CisgICAgcmV0dXJuIG1fc3R5bGVTaGVldENTU09NV3JhcHBlci5nZXQoKTsg
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIE1lZGlhTGlzdDsKIGNs
YXNzIE1lZGlhUXVlcnlTZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiAKIGNsYXNzIFN0
eWxlUnVsZUltcG9ydCA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJl
bnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoU3R5bGVTaGVldEludGVy
bmFsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0
Pik7CiAKICAgICB+U3R5bGVSdWxlSW1wb3J0KCk7CiAgICAgCi0gICAgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQor
ICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3R5bGVTaGVldDsgfQogICAgIHZvaWQgY2xlYXJQYXJlbnRTdHlsZVNoZWV0KCkg
eyBtX3BhcmVudFN0eWxlU2hlZXQgPSAwOyB9CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RySHJlZjsgfQotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KIAogICAg
IC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTS4KICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwpA
QCAtNzAsMTUgKzcxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgZnJpZW5kIGNsYXNzIEltcG9y
dGVkU3R5bGVTaGVldENsaWVudDsKIAotICAgIFN0eWxlUnVsZUltcG9ydChDU1NTdHlsZVNoZWV0
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CisgICAgU3R5bGVSdWxlSW1wb3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBT
dHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOwogCi0gICAgLy8gRlhJTUU6
IFRoaXMgbmVlZHMgdG8gZ28gYXdheS4KLSAgICBDU1NTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxl
U2hlZXQ7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAKICAg
ICBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQgbV9zdHlsZVNoZWV0Q2xpZW50OwogICAgIFN0cmlu
ZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwot
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CisgICAgUmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gbV9zdHlsZVNoZWV0OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZENTU1N0eWxlU2hlZXQ+IG1fY2FjaGVkU2hlZXQ7CiAgICAgYm9vbCBtX2xvYWRpbmc7CiB9
OwpAQCAtODYsMTAgKzg2LDEyIEBAIHByaXZhdGU6CiBjbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0ltcG9ydFJ1
bGU+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9CisgICAg
CisgICAgfkNTU0ltcG9ydFJ1bGUoKTsKIAogICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRSdWxlLT5ocmVmKCk7IH0KICAgICBNZWRpYUxpc3QqIG1lZGlhKCk7Ci0gICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpOyB9CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0Owog
ICAgIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKQEAgLTk3LDYgKzk5LDggQEAgcHJp
dmF0ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCosIENTU1N0eWxlU2hlZXQq
KTsKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IG1faW1wb3J0UnVsZTsKKworICAgIG11
dGFibGUgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
ZWRpYVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1
bGUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2
LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTgsOCArNTgsOSBAQCB1
bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3QgCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIENTU1BhcnNlciBwKGNzc1BhcnNlck1vZGUoKSk7Ci0gICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwLnBhcnNlUnVsZShwYXJlbnRTdHlsZVNoZWV0KCks
IHJ1bGVTdHJpbmcpOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHls
ZVNoZWV0KCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcihzdHlsZVNoZWV0ID8gc3R5bGVTaGVldC0+
aW50ZXJuYWwoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSk7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwYXJzZXIucGFyc2VSdWxlKHN0eWxlU2hlZXQgPyBz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMCwgcnVsZVN0cmluZyk7CiAgICAgaWYgKCFuZXdSdWxl
KSB7CiAgICAgICAgIC8vIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUg
aGFzIGEgc3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxlLgogICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTEzODUxKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Miw3ICsyNTIsNyBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogCiAg
ICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGlu
ZU51bWJlciwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKK3ZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9
IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldAogICAgIG1fcnVs
ZSA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXJzZVJ1
bGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJuYWwq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0
KTsKICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CkBAIC0yNzksNyAr
Mjc5LDcgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcgogICAgIHJl
dHVybiBtX3J1bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENT
U1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCAqc2hlZXQsIGNvbnN0IFN0
cmluZyAmc3RyaW5nKQorUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OnBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyAmc3Ry
aW5nKQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIHNldHVwUGFyc2VyKCJALXdl
YmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwpAQCAtOTA5LDcgKzkwOSw3IEBA
IHN0YXRpYyBib29sIHBhcnNlS2V5d29yZFZhbHVlKFN0eWxlUHJvcGUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFj
ZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9u
dEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldEludGVybmFs
KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZHVt
bXlTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIGlmICghcGFyc2VWYWx1
ZShkdW1teVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHN0cmluZywgZmFsc2Us
IENTU1F1aXJrc01vZGUsIGNvbnRleHRTdHlsZVNoZWV0KSkKQEAgLTkxNyw3ICs5MTcsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzCiAgICAgcmV0dXJuIHN0YXRp
Y19wb2ludGVyX2Nhc3Q8Q1NTVmFsdWVMaXN0PihkdW1teVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQs
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlv
biwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTkyOSw3ICs5MjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0
aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwog
fQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJh
dGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hl
ZXQoY29udGV4dFN0eWxlU2hlZXQpOwogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImCiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVudCogZG9jLCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCkKIHsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHls
ZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gZHVtbXlTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUo
ZG9jKTsKIAogICAgIHNldFN0eWxlU2hlZXQoZHVtbXlTdHlsZVNoZWV0LmdldCgpKTsKICAgICBt
X3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAmc2VsZWN0b3JMaXN0OwpAQCAtMTAyMiw3
ICsxMDIyLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaQogICAg
IEFTU0VSVChkdW1teVN0eWxlU2hlZXQtPmhhc09uZVJlZigpKTsKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogc3R5bGVTb3VyY2VE
YXRhLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwg
U3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGgg
b2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgcHJlZml4TGVuZ3RoID0gMTU7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCB2b2lkIENTU1BhcnNl
cjo6Y2xlYXJQcm9wZXJ0aWVzKCkKICAgICBtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyA9IGZhbHNl
OwogfQogCi12b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KQordm9pZCBDU1NQYXJzZXI6OnNldFN0eWxlU2hlZXQoU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7CiB9CkBAIC03
MjgzLDcgKzcyODMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKGNvbnN0IFN0
CiAgICAgQVNTRVJUKGRvYyk7CiAgICAgQVNTRVJUKGRvYy0+Y3NzUmVnaW9uc0VuYWJsZWQoKSk7
CiAKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHlsZVNoZWV0ID0gQ1NTU3R5bGVT
aGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gZHVtbXlT
dHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoZG9jKTsKICAgICBzZXRTdHls
ZVNoZWV0KGR1bW15U3R5bGVTaGVldC5nZXQoKSk7CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJr
aXQtZGVjbHN7LXdlYmtpdC1mbG93LWludG86IiwgZmxvd05hbWUsICJ9Iik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgY2xhc3MgQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBDU1NQ
cm9wZXJ0eTsKIGNsYXNzIENTU1NlbGVjdG9yTGlzdDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7CiBj
bGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENTU1dyYXBTaGFwZTsK
QEAgLTYyLDYgKzYxLDcgQEAgY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKIGNsYXNzIFN0
eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZUtleWZy
YW1lOworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIAog
Y2xhc3MgQ1NTUGFyc2VyIHsKQEAgLTcwLDE1ICs3MCwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q1NT
UGFyc2VyKCk7CiAKLSAgICB2b2lkIHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJh
bmdlTWFwID0gMCk7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBDU1NTdHlsZVNo
ZWV0Kik7CisgICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAwKTsK
KyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJu
YWwqLCBjb25zdCBTdHJpbmcmKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0
IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBib29sIHBhcnNlU3lz
dGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBB
dG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShpbnQgaWRl
bnQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJv
cGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiosIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJj
ZURhdGE+KiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgUGFz
c093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgY29uc3Q7CkBAIC0yODYsNyArMjg2LDcgQEAgcHVi
bGljOgogICAgIENTU1BhcnNlck1vZGUgbV9jc3NQYXJzZXJNb2RlOwogICAgIGJvb2wgbV9pbXBv
cnRhbnQ7CiAgICAgQ1NTUHJvcGVydHlJRCBtX2lkOwotICAgIENTU1N0eWxlU2hlZXQqIG1fc3R5
bGVTaGVldDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIG1fc3R5bGVTaGVldDsKICAgICBSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gbV9ydWxlOwogICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tl
eWZyYW1lOwogICAgIE93blB0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsK
ICAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CiAKLSAgICB2b2lkIHNl
dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHls
ZVNoZWV0SW50ZXJuYWwqKTsKIAogICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IG1fY3NzUGFyc2Vy
TW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOyB9CiAgICAgaW5saW5lIGJvb2wgaW5RdWlya3NNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGU7IH0KQEAg
LTM2Myw3ICszNjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZVZhbHVl
KENTU1BhcnNlclZhbHVlKikgY29uc3Q7CiAgICAgYm9vbCBwYXJzZUdlbmVyYXRlZEltYWdlKENT
U1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIAotICAgIGJvb2wgcGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29s
IHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KTsKIAogICAgIGVudW0gU2l6ZVBhcmFtZXRlclR5cGUgewogICAgICAgICBOb25lLApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3Rv
bUNzc1RleHQoCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6
OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAobV9wcmltaXRpdmVVbml0VHlwZSA9
PSBDU1NfVVJJKQogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzdHlsZVNoZWV0LT5j
b21wbGV0ZVVSTChtX3ZhbHVlLnN0cmluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBtX2lzUXVpcmtWYWx1ZTsg
fQogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYs
IGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKICAgICBM
ZW5ndGggdmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCkKK3ZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0
KQogewogICAgIGlmIChtX21hc2spCiAgICAgICAgIG1fbWFzay0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgc3R5bGVTaGVldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RW
YWx1ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogCiBwcml2YXRlOgogICAgIENTU1JlZmxlY3RWYWx1ZShDU1NS
ZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBtYXNrKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVs
ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSwxNSArNjksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlZ2lv
blJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX1JFR0lPTl9SVUxFOyB9CiAg
ICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSU1QT1JUX1JV
TEU7IH0KIAotICAgIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAocGFyZW50UnVsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJ1bGUo
KS0+Y3NzUGFyc2VyTW9kZSgpOwotICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlU2hlZXQoKS0+Y3NzUGFyc2VyTW9kZSgpOwotICAg
ICAgICByZXR1cm4gQ1NTU3RyaWN0TW9kZTsKLSAgICB9Ci0KICAgICB2b2lkIHNldFBhcmVudFN0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKICAgICB7CiAgICAgICAgIG1fcGFy
ZW50SXNSdWxlID0gZmFsc2U7CkBAIC0xMDIsMTMgKzkzLDYgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKLSAgICAgICAgcmV0dXJu
IEtVUkwoKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQq
IHBhcmVudCwgVHlwZSB0eXBlKQogICAgICAgICA6IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGZh
bHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRv
bVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3Iq
ID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAogICAgIHZvaWQgYWRkU3R5bGVSdWxl
KFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKICAgICB2b2lk
IGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1
bGUgPSBmYWxzZSk7CkBAIC0yODUsMTMgKzI4NSwxMyBAQCBzdGF0aWMgUnVsZVNldCogZGVmYXVs
dFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJj
ZVN0eWxlOwotc3RhdGljIENTU1N0eWxlU2hlZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Owot
c3RhdGljIENTU1N0eWxlU2hlZXQqIGRlZmF1bHRTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxl
U2hlZXQqIHF1aXJrc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc3ZnU3R5bGVT
aGVldDsKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBtYXRoTUxTdHlsZVNoZWV0Owotc3RhdGljIENT
U1N0eWxlU2hlZXQqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hl
ZXQqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBkZWZhdWx0
U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHF1aXJrc1N0eWxlU2hlZXQ7
CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBzdmdTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxl
U2hlZXRJbnRlcm5hbCogbWF0aE1MU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJu
YWwqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
ZnVsbHNjcmVlblN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpz
X3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCkBAIC0zOTksNyArMzk5LDcgQEAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3Mh
IFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3duUHRyPFJ1bGVT
ZXQ+IHRlbXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVT
aGVldCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpCisgICAgaWYg
KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNo
ZWV0KCkpCiAgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2Vy
U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNl
clJ1bGVzRnJvbVNoZWV0cyhkb2N1bWVudC0+cGFnZUdyb3VwVXNlclNoZWV0cygpLCAqdGVtcFVz
ZXJTdHlsZSk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0
cyhkb2N1bWVudC0+ZG9jdW1lbnRVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKQEAgLTQx
OCwxNCArNDE4LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0K
ICAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+
dmVjdG9yKCkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+KiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUpCit2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQm
IHVzZXJTdHlsZSkKIHsKICAgICBpZiAoIXVzZXJTaGVldHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+JiBzaGVldCA9IHVzZXJTaGVldHMtPmF0KGkpOworICAgICAgICBjb25zdCBSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiYgc2hlZXQgPSB1c2VyU2hlZXRzLT5hdChpKTsKICAgICAg
ICAgaWYgKHNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAg
IGVsc2UKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RG
ZWF0dXJlcygpCiB9CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotY29uc3QgQ29udGFpbmVy
Tm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVl
dCogc2hlZXQpCitjb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1p
bmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0KQogewogICAgIEFTU0VSVChz
aGVldCk7CiAKQEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVu
ZEF1dGhvclN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgQ1NTU3R5bGVTaGVl
dCogY3NzU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVzaGVldHNbaV0u
Z2V0KCkpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQpOworICAgICAgICBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSA9IGRldGVybWluZVNjb3BlKGNzc1NoZWV0LT5pbnRlcm5hbCgp
KTsKICAgICAgICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTUxNCw3ICs1
MTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIG1fYXV0aG9yU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICBt
X2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldC0+aW50ZXJuYWwoKSwgKm1f
bWVkaXVtLCB0aGlzKTsKICAgICAgICAgaWYgKCFtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFw
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxl
VG9DU1NPTVdyYXBwZXJNYXAsIGNzc1NoZWV0KTsKICAgICB9CkBAIC02ODAsMTQgKzY4MCwxNCBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcigpCiAgICAgdXNlc0xpbmtS
dWxlcyA9IGZhbHNlOwogfQogCi1zdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNv
bnN0IFN0cmluZyYgc3RyKQorc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyc2VVQVNoZWV0
KGNvbnN0IFN0cmluZyYgc3RyKQogewotICAgIENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKCkubGVha1JlZigpOyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3Nl
CisgICAgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3Jl
YXRlKCkubGVha1JlZigpOyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCiAgICAgc2hlZXQt
PnBhcnNlU3RyaW5nKHN0cik7CiAgICAgcmV0dXJuIHNoZWV0OwogfQogCi1zdGF0aWMgQ1NTU3R5
bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNp
emUpCitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBwYXJzZVVBU2hlZXQoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgc2l6ZSkKIHsKICAgICByZXR1cm4gcGFyc2VVQVNoZWV0KFN0
cmluZyhjaGFyYWN0ZXJzLCBzaXplKSk7CiB9CkBAIC0yMjM3LDcgKzIyMzcsNyBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU2VsZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
ICAgIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JT
Y29wZXMoQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCiti
b29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhT
dHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQogewog
ICAgIEFTU0VSVCghc3R5bGVzaGVldC0+aXNMb2FkaW5nKCkpOwogCkBAIC0yNDYyLDcgKzI0NjIs
NyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnCiAgICAgbV9yZWdp
b25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFpcihyZWdpb25S
dWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVhc2UoKSkpOwog
fQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0
eWxlU2VsZWN0b3IsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQordm9pZCBSdWxlU2V0Ojph
ZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogewogICAgIEFTU0VSVChzaGVldCk7CiAKQEAgLTI5
MDMsNyArMjkwMywxNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFw
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0
eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIERvY3VtZW50KiBk
b2N1bWVudCkKK3N0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVS
dWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0
eWxlU2hlZXQpCit7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPENTU1N0eWxlU2hlZXQ+IHN0eWxlU2hlZXRXcmFwcGVyID0gQ1NTU3R5bGVTaGVldDo6
Y3JlYXRlKHN0eWxlU2hlZXQpOworICAgIHNoZWV0V3JhcHBlclNldC5hZGQoc3R5bGVTaGVldFdy
YXBwZXIpOworICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0eWxlU2hlZXRX
cmFwcGVyLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFz
aE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBIYXNo
U2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIERvY3VtZW50KiBk
b2N1bWVudCkKIHsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxl
U2hlZXRzID0gZG9jdW1lbnQtPnN0eWxlU2hlZXRzKCktPnZlY3RvcigpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0cy5zaXplKCk7ICsraSkgewpAQCAtMjkxMiwyMSAr
MjkyMSwyMSBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1h
cCwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpKTsKICAgICB9Ci0gICAg
Y29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQo
KSk7CisgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc2hlZXRXcmFwcGVyU2V0
LCBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKTsKIH0KIAogQ1NTU3R5bGVSdWxlKiBDU1NTdHls
ZVNlbGVjdG9yOjplbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSog
cnVsZSkKIHsKICAgICBpZiAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCwgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFw
cGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBkZWZhdWx0U3R5bGVTaGVldCk7Ci0g
ICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAs
IHF1aXJrc1N0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxl
UnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBzdmdTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENT
U09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbWF0aE1MU3R5bGVTaGVl
dCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBw
ZXJNYXAsIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgZnVsbHNjcmVlblN0eWxlU2hlZXQp
OworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0
KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBkZWZhdWx0U3R5bGVTaGVldCk7Cisg
ICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAs
IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgcXVpcmtzU3R5bGVTaGVldCk7CisgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlclNldCwgc3ZnU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCwgbWF0aE1MU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdy
YXBwZXJTZXQsIGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKIAotICAgICAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBkb2N1bWVudCgpKTsKKyAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBkb2N1bWVudCgpKTsKICAgICB9CiAgICAgcmV0dXJu
IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw2ICs4MCw3IEBAIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247
CiBjbGFzcyBTdHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0
SW50ZXJuYWw7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBj
bGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsKQEAgLTE1Niw3ICsxNTcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CiAgICAgCiAgICAgLy8gRmluZCB0aGUgaWRz
IG9yIGNsYXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4g
VGhlIHNlbGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRo
ZSByb290IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCi0gICAgc3RhdGljIGJvb2wgZGV0ZXJt
aW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxlU2hlZXQqLCBIYXNoU2V0PEF0b21p
Y1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFz
c1Njb3Blcyk7CisgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2Nv
cGVzKFN0eWxlU2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNj
b3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwpAQCAtMzk5LDcgKzQwMCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0
QXZhaWxhYmxlOwogCi0gICAgdm9pZCBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNG
cm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiosIFJ1bGVTZXQm
IHVzZXJTdHlsZSk7CisgICAgdm9pZCBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNG
cm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVs
ZVNldCYgdXNlclN0eWxlKTsKIAogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7
CiAKQEAgLTQ5NiwxMyArNDk3LDE0IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBs
eVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7CiAgICAgCiAgICAgSGFzaE1hcDxTdHlsZVJ1bGUq
LCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXA7Cisg
ICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBw
ZXJTZXQ7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdT
aGFkZXJzOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIHN0YXRpYyBj
b25zdCBDb250YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0Kik7
CisgICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5l
ck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc0LDkgKzc0LDEx
IEBAIHN0YXRpYyBib29sIGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQYXIKIH0KICNlbmRpZgog
Ci1DU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0
cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQot
ICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBiYXNlVVJMKQorU3R5bGVTaGVldElu
dGVybmFsOjpTdHlsZVNoZWV0SW50ZXJuYWwoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCkKKyAgICA6IG1fb3duZXJOb2RlKHBhcmVudE5vZGUpCiAgICAgLCBtX293bmVyUnVsZSgwKQor
ICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxV
UkwpCiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxz
ZSkKICAgICAsIG1fY3NzUGFyc2VyTW9kZShDU1NRdWlya3NNb2RlKQpAQCAtODcsMjUgKzg5LDI3
IEBAIENTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSogcGFyZW4KICAgICBBU1NFUlQo
aXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBhcmVudChwYXJlbnROb2RlKSk7CiB9CiAKLUNTU1N0
eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KQotICAgIDogU3R5bGVTaGVldChocmVmLCBiYXNlVVJMKQorU3R5bGVTaGVldEludGVybmFsOjpT
dHlsZVNoZWV0SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpCisgICAgOiBtX293bmVyTm9kZSgwKQogICAgICwgbV9vd25lclJ1bGUob3duZXJSdWxlKQor
ICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxV
UkwpCiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxz
ZSkKICAgICAsIG1fY3NzUGFyc2VyTW9kZSgob3duZXJSdWxlICYmIG93bmVyUnVsZS0+cGFyZW50
U3R5bGVTaGVldCgpKSA/IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5jc3NQYXJzZXJN
b2RlKCkgOiBDU1NTdHJpY3RNb2RlKQogICAgICwgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NI
ZWFkZXIodHJ1ZSkKICAgICAsIG1fZGlkTG9hZEVycm9yT2NjdXIoZmFsc2UpCiB7Ci0gICAgQ1NT
U3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVudFN0
eWxlU2hlZXQoKSA6IDA7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnRTaGVldCA9IG93
bmVyUnVsZSA/IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKICAgICBtX2lzVXNl
clN0eWxlU2hlZXQgPSBwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0
KCkgOiBmYWxzZTsKIH0KIAotQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQorU3R5bGVT
aGVldEludGVybmFsOjp+U3R5bGVTaGVldEludGVybmFsKCkKIHsKICAgICBjbGVhclJ1bGVzKCk7
CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6cGFyc2VyQXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0
eWxlUnVsZUJhc2U+IHJ1bGUpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VyQXBwZW5k
UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCiB7CiAgICAgQVNTRVJUKCFydWxl
LT5pc0NoYXJzZXRSdWxlKCkpOwogICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewpAQCAt
MTE4LDI0ICsxMjIsMjQgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJzZXJBcHBlbmRSdWxlKFBh
cwogICAgIG1fY2hpbGRSdWxlcy5hcHBlbmQocnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVs
ZT4gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2lnbmVkIGlu
ZGV4KQorUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUNoaWxk
UnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3Jh
cHBlcikKIHsKLSAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4
IDwgcnVsZUNvdW50KCkpOwogICAgIAogICAgIHVuc2lnbmVkIGNoaWxkVmVjdG9ySW5kZXggPSBp
bmRleDsKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoaW5kZXggPT0g
MCkKLSAgICAgICAgICAgIHJldHVybiBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHRoaXMsIG1fZW5j
b2RpbmdGcm9tQ2hhcnNldFJ1bGUpOworICAgICAgICAgICAgcmV0dXJuIENTU0NoYXJzZXRSdWxl
OjpjcmVhdGUocGFyZW50V3JhcHBlciwgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSk7CiAgICAg
ICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKICAgICB9CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXgg
PCBtX2ltcG9ydFJ1bGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1faW1wb3J0UnVsZXNbY2hp
bGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcih0aGlzKTsKKyAgICAgICAgcmV0dXJu
IG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcihwYXJl
bnRXcmFwcGVyKTsKICAgICAKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOwotICAgIHJldHVybiBtX2NoaWxkUnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0
ZUNTU09NV3JhcHBlcih0aGlzKTsKKyAgICByZXR1cm4gbV9jaGlsZFJ1bGVzW2NoaWxkVmVjdG9y
SW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CiB9CiAKLXVuc2lnbmVk
IENTU1N0eWxlU2hlZXQ6Omxlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBTdHlsZVNoZWV0SW50ZXJu
YWw6OnJ1bGVDb3VudCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICBy
ZXN1bHQgKz0gaGFzQ2hhcnNldFJ1bGUoKSA/IDEgOiAwOwpAQCAtMTQ0LDM4ICsxNDgsMTMgQEAg
dW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1DU1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewot
ICAgIHVuc2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOwotICAgIGlmIChpbmRleCA+PSBydWxl
Q291bnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChtX2NoaWxkUnVsZUNTU09N
V3JhcHBlcnMuaXNFbXB0eSgpKQotICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuZ3Jv
dyhydWxlQ291bnQpOwotICAgIEFTU0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgp
ID09IHJ1bGVDb3VudCk7Ci0KLSAgICBSZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdOwotICAgIGlmICghY3NzUnVsZSkKLSAgICAgICAgY3Nz
UnVsZSA9IGNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcihpbmRleCk7Ci0gICAgcmV0dXJuIGNz
c1J1bGUuZ2V0KCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGFyc2V0UnVsZSgp
Cit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6Y2xlYXJDaGFyc2V0UnVsZSgpCiB7CiAgICAgbV9l
bmNvZGluZ0Zyb21DaGFyc2V0UnVsZSA9IFN0cmluZygpOwogfQogCi12b2lkIENTU1N0eWxlU2hl
ZXQ6OmNsZWFyUnVsZXMoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmNsZWFyUnVsZXMoKQog
ewotICAgIC8vIEZvciBzdHlsZSBydWxlcyBvdXRzaWRlIHRoZSBkb2N1bWVudCwgLnBhcmVudFN0
eWxlU2hlZXQgY2FuIGJlY29tZSBudWxsIGV2ZW4gaWYgdGhlIHN0eWxlIHJ1bGUKLSAgICAvLyBp
cyBzdGlsbCBvYnNlcnZhYmxlIGZyb20gSmF2YVNjcmlwdC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhh
dmlvciBvZiAucGFyZW50Tm9kZSBmb3Igbm9kZXMsIGJ1dAotICAgIC8vIGl0J3Mgbm90IGlkZWFs
IGJlY2F1c2UgaXQgbWFrZXMgdGhlIENTU09NJ3MgYmVoYXZpb3IgZGVwZW5kIG9uIHRoZSB0aW1p
bmcgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY2hp
bGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKLSAgICAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVyc1tpXS0+c2V0UGFyZW50U3R5bGVTaGVldCgwKTsKLSAgICB9Ci0gICAgbV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzLmNsZWFyKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9p
bXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQobV9pbXBvcnRSdWxlcy5h
dChpKS0+cGFyZW50U3R5bGVTaGVldCgpID09IHRoaXMpOwogICAgICAgICBtX2ltcG9ydFJ1bGVz
W2ldLT5jbGVhclBhcmVudFN0eWxlU2hlZXQoKTsKQEAgLTE4NSw0NSArMTY0LDE2IEBAIHZvaWQg
Q1NTU3R5bGVTaGVldDo6Y2xlYXJSdWxlcygpCiAgICAgY2xlYXJDaGFyc2V0UnVsZSgpOwogfQog
Ci12b2lkIENTU1N0eWxlU2hlZXQ6OnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VyU2V0
RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsKICAgICAv
LyBQYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGVyZSBpcyBldmVyIG9ubHkgb25lIEBjaGFyc2V0Lgog
ICAgIEFTU0VSVChtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpKTsKICAgICBtX2Vu
Y29kaW5nRnJvbUNoYXJzZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1QYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiBDU1NTdHlsZVNoZWV0OjpydWxlcygpCitib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6
d3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1bnNpZ25l
ZCBpbmRleCkKIHsKLSAgICBLVVJMIHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZmluZERvY3VtZW50KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3Vt
ZW50ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICAvLyBJRSBiZWhhdmlvci4KLSAgICBSZWZQdHI8U3RhdGljQ1NT
UnVsZUxpc3Q+IG5vbkNoYXJzZXRSdWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsK
LSAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcnVsZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0ZW0o
aSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0NoYXJzZXRSdWxlKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgbm9uQ2hhcnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG5vbkNoYXJzZXRSdWxlcy5yZWxlYXNlKCk7Ci19Ci0KLXVuc2lnbmVk
IENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNp
Z25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChp
bmRleCA+IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKCkpOwotICAg
IFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlID0gcC5wYXJzZVJ1bGUodGhpcywgcnVsZVN0cmlu
Zyk7Ci0KLSAgICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKGluZGV4IDw9IHJ1bGVDb3VudCgpKTsKICAg
ICAvLyBQYXJzZXI6OnBhcnNlUnVsZSBkb2Vzbid0IGN1cnJlbnRseSBhbGxvdyBAY2hhcnNldCBz
byB3ZSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBpdC4KICAgICBBU1NFUlQoIXJ1bGUtPmlzQ2hh
cnNldFJ1bGUoKSk7CiAgICAgCkBAIC0yMzIsOTkgKzE4Miw1OCBAQCB1bnNpZ25lZCBDU1NTdHls
ZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgaWYgKGhhc0NoYXJzZXRSdWxlKCkpIHsKICAg
ICAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPT0gMCkgewogICAgICAgICAgICAgLy8gTm90aGlu
ZyBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIEBjaGFyc2V0LgotICAgICAgICAgICAgZWMgPSBISUVS
QVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7CiAgICAg
fQogICAgIAogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkg
fHwgKGNoaWxkVmVjdG9ySW5kZXggPT0gbV9pbXBvcnRSdWxlcy5zaXplKCkgJiYgcnVsZS0+aXNJ
bXBvcnRSdWxlKCkpKSB7CiAgICAgICAgIC8vIEluc2VydGluZyBub24taW1wb3J0IHJ1bGUgYmVm
b3JlIEBpbXBvcnQgaXMgbm90IGFsbG93ZWQuCi0gICAgICAgIGlmICghcnVsZS0+aXNJbXBvcnRS
dWxlKCkpIHsKLSAgICAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFydWxlLT5pc0ltcG9ydFJ1
bGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5p
bnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4ocnVs
ZS5nZXQoKSkpOwogICAgICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5yZXF1
ZXN0U3R5bGVTaGVldCgpOwotICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAgIC8vIEZJWE1F
OiBTdHlsZXNoZWV0IGRvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIG1lYW5pbmdmdWxseSBiZWZvcmUg
dGhlIGltcG9ydGVkIHNoZWV0cyBhcmUgbG9hZGVkLgorICAgICAgICBzdHlsZVNoZWV0Q2hhbmdl
ZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSW5zZXJ0aW5nIEBpbXBv
cnQgcnVsZSBhZnRlciBhIG5vbi1pbXBvcnQgcnVsZSBpcyBub3QgYWxsb3dlZC4KLSAgICBpZiAo
cnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1w
b3J0UnVsZXMuc2l6ZSgpOwogIAotICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJ
bmRleCwgcnVsZS5yZWxlYXNlKCkpOworICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0
b3JJbmRleCwgcnVsZSk7CiAgICAgCi1zdWNjZXNzOgotICAgIGlmICghbV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlu
c2VydChpbmRleCwgUmVmUHRyPENTU1J1bGU+KCkpOwotCi0gICAgLy8gRklYTUU6IFN0eWxlc2hl
ZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0
ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCiAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKLSAgICByZXR1
cm4gaW5kZXg7Ci19Ci0KLWludCBDU1NTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsgc3R5bGUgKyAiIH0iLCBp
bmRleCwgZWMpOwotCi0gICAgLy8gQXMgcGVyIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uLCBhbHdh
eXMgcmV0dXJuIC0xLgotICAgIHJldHVybiAtMTsKLX0KLQotaW50IENTU1N0eWxlU2hlZXQ6OmFk
ZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGFkZFJ1bGUoc2VsZWN0b3IsIHN0eWxlLCBsZW5n
dGgoKSwgZWMpOworICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBDU1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3Jh
cHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgS1VSTCB1cmwgPSBmaW5hbFVS
TCgpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZpbmREb2N1bWVudCgpOwotICAgIGlmICgh
dXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QodXJsKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX3J1bGVMaXN0
Q1NTT01XcmFwcGVyKQotICAgICAgICBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyID0gYWRvcHRQdHIo
bmV3IFN0eWxlU2hlZXRDU1NSdWxlTGlzdCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fcnVsZUxpc3RD
U1NPTVdyYXBwZXIuZ2V0KCk7Ci19CisgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOwog
Ci12b2lkIENTU1N0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkgewotICAgICAgICBlYyA9
IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGVjID0g
MDsKICAgICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0No
YXJzZXRSdWxlKCkpIHsKICAgICAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPT0gMCkgewogICAg
ICAgICAgICAgY2xlYXJDaGFyc2V0UnVsZSgpOwotICAgICAgICAgICAgZ290byBzdWNjZXNzOwor
ICAgICAgICAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7CiAgICAgfQogICAgIGlmIChjaGls
ZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkpIHsKICAgICAgICAgbV9pbXBvcnRS
dWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgICAg
IG1faW1wb3J0UnVsZXMucmVtb3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotICAgICAgICBnb3RvIHN1
Y2Nlc3M7CisgICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKIAogICAg
IG1fY2hpbGRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7Ci0KLXN1Y2Nlc3M6Ci0gICAg
aWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY2hp
bGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVudFN0eWxlU2hlZXQoMCk7Ci0gICAg
ICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUoaW5kZXgpOwotICAgIH0KLQogICAg
IHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6YWRkTmFtZXNw
YWNlKENTU1BhcnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdXJpKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmFkZE5hbWVzcGFjZShDU1NQ
YXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcm
IHVyaSkKIHsKICAgICBpZiAodXJpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzcs
NyArMjQ2LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFycwogICAg
ICAgICBwLT5tX2RlZmF1bHROYW1lc3BhY2UgPSB1cmk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgQ1NTU3R5bGVTaGVldDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4KQorY29uc3QgQXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0SW50ZXJuYWw6OmRldGVybWlu
ZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsKICAgICBpZiAocHJlZml4
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207IC8vIE5vIG5hbWVzcGFjZS4gSWYg
YW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4K
QEAgLTM1MCwxMiArMjU5LDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVldDo6
ZGV0ZXIKICAgICByZXR1cm4gbnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3b24ndCBtYXRjaCBhbnkg
bmFtZXNwYWNlcy4KIH0KIAotYm9vbCBDU1NTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBT
dHJpbmcgJnN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorYm9vbCBTdHlsZVNo
ZWV0SW50ZXJuYWw6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUpCiB7CiAgICAgcmV0dXJuIHBhcnNlU3RyaW5nQXRMaW5lKHN0cmlu
ZywgY3NzUGFyc2VyTW9kZSwgMCk7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTaGVldDo6cGFyc2VTdHJp
bmdBdExpbmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSwgaW50IHN0YXJ0TGluZU51bWJlcikKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0
cmluZ0F0TGluZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKQogewogICAgIHNldENTU1BhcnNlck1vZGUoY3NzUGFy
c2VyTW9kZSk7CiAgICAgQ1NTUGFyc2VyIHAoY3NzUGFyc2VyTW9kZSk7CkBAIC0zNjMsNyArMjcy
LDcgQEAgYm9vbCBDU1NTdHlsZVNoZWV0OjpwYXJzZVN0cmluZ0F0TGluZShjbwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIENTU1N0eWxlU2hlZXQ6OmlzTG9hZGluZygpCitib29sIFN0eWxl
U2hlZXRJbnRlcm5hbDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9pbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pbXBv
cnRSdWxlc1tpXS0+aXNMb2FkaW5nKCkpCkBAIC0zNzIsNyArMjgxLDcgQEAgYm9vbCBDU1NTdHls
ZVNoZWV0Ojppc0xvYWRpbmcoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHls
ZVNoZWV0OjpjaGVja0xvYWRlZCgpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6Y2hlY2tMb2Fk
ZWQoKQogewogICAgIGlmIChpc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDgg
KzI4OSw4IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQogICAgIC8vIEF2b2lk
IHx0aGlzfCBiZWluZyBkZWxldGVkIGJ5IHNjcmlwdHMgdGhhdCBydW4gdmlhCiAgICAgLy8gU2Ny
aXB0YWJsZURvY3VtZW50UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0
cygpLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNjYyMjMwMD4uCi0gICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiBwcm90ZWN0b3IodGhpcyk7CisgICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVT
aGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKICAgICAgICAgc3R5bGVTaGVldC0+Y2hlY2tMb2Fk
ZWQoKTsKIAogICAgIFJlZlB0cjxOb2RlPiBvd25lciA9IG93bmVyTm9kZSgpOwpAQCAtMzk0LDUw
ICszMDMsNDMgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCiAgICAgfQogfQog
Ci12b2lkIENTU1N0eWxlU2hlZXQ6Om5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENTU1N0
eWxlU2hlZXQqIHNoZWV0KQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6Om5vdGlmeUxvYWRlZFNo
ZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqIHNoZWV0KQogewogICAgIEFTU0VSVChzaGVl
dCk7CiAgICAgbV9kaWRMb2FkRXJyb3JPY2N1ciB8PSBzaGVldC0+ZXJyb3JPY2N1cnJlZCgpOwog
fQogCi12b2lkIENTU1N0eWxlU2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpCit2b2lk
IFN0eWxlU2hlZXRJbnRlcm5hbDo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkKIHsKICAgICBp
ZiAoTm9kZSogb3duZXIgPSBvd25lck5vZGUoKSkKICAgICAgICAgb3duZXItPnN0YXJ0TG9hZGlu
Z0R5bmFtaWNTaGVldCgpOwogfQogCi1Ob2RlKiBDU1NTdHlsZVNoZWV0OjpmaW5kU3R5bGVTaGVl
dE93bmVyTm9kZSgpIGNvbnN0CitOb2RlKiBTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmRTdHlsZVNo
ZWV0T3duZXJOb2RlKCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNo
ZWV0ID0gdGhpczsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewor
ICAgIGZvciAoY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IHRoaXM7IHNoZWV0OyBz
aGVldCA9IHNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKICAgICAgICAgaWYgKE5vZGUqIG93
bmVyTm9kZSA9IHNoZWV0LT5vd25lck5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBvd25lck5v
ZGU7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1Eb2N1bWVudCogQ1NTU3R5bGVTaGVldDo6
ZmluZERvY3VtZW50KCkKK0RvY3VtZW50KiBTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVu
dCgpCiB7CiAgICAgTm9kZSogb3duZXJOb2RlID0gZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsK
IAogICAgIHJldHVybiBvd25lck5vZGUgPyBvd25lck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQot
ICAgIAotTWVkaWFMaXN0KiBDU1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoteyAKLSAgICBp
ZiAoIW1fbWVkaWFRdWVyaWVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9tZWRp
YVF1ZXJpZXMtPmVuc3VyZU1lZGlhTGlzdChjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlz
KSk7Ci19CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8
TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVyaWVzKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnNl
dE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKIHsK
ICAgICBtX21lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllczsKIH0KIAotdm9pZCBDU1NTdHlsZVNo
ZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6c3R5bGVT
aGVldENoYW5nZWQoKQogewotICAgIENTU1N0eWxlU2hlZXQqIHJvb3RTaGVldCA9IHRoaXM7Ci0g
ICAgd2hpbGUgKENTU1N0eWxlU2hlZXQqIHBhcmVudCA9IHJvb3RTaGVldC0+cGFyZW50U3R5bGVT
aGVldCgpKQorICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gdGhpczsKKyAgICB3
aGlsZSAoU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnQgPSByb290U2hlZXQtPnBhcmVudFN0eWxl
U2hlZXQoKSkKICAgICAgICAgcm9vdFNoZWV0ID0gcGFyZW50OwogCiAgICAgLyogRklYTUU6IFdl
IGRvbid0IG5lZWQgdG8gZG8gZXZlcnl0aGluZyB1cGRhdGVTdHlsZVNlbGVjdG9yIGRvZXMsCkBA
IC00NDcsOCArMzQ5LDE5IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5nZWQo
KQogICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnRUb1VwZGF0ZSA9IHJvb3RTaGVldC0+ZmluZERv
Y3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50VG9VcGRhdGUtPnN0eWxlU2VsZWN0b3JDaGFuZ2Vk
KERlZmVyUmVjYWxjU3R5bGUpOwogfQorICAgIAorS1VSTCBTdHlsZVNoZWV0SW50ZXJuYWw6OmJh
c2VVUkwoKSBjb25zdAoreworICAgIGlmICghbV9maW5hbFVSTC5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIG1fZmluYWxVUkw7CisgICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U2hl
ZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFz
ZVVSTCgpOworICAgIGlmICghbV9vd25lck5vZGUpCisgICAgICAgIHJldHVybiBLVVJMKCk7Cisg
ICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7Cit9CiAKLUtVUkwg
Q1NTU3R5bGVTaGVldDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CitLVVJM
IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0
CiB7CiAgICAgLy8gQWx3YXlzIHJldHVybiBhIG51bGwgVVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBz
dHJpbmcuCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0
b3IgdG8gaGF2ZSB0aGlzIGJlaGF2aW9yPwpAQCAtNDYxLDEzICszNzQsMTMgQEAgS1VSTCBDU1NT
dHlsZVNoZWV0Ojpjb21wbGV0ZVVSTChjb25zdCBTdAogICAgIHJldHVybiBLVVJMKGJhc2VVUkwo
KSwgdXJsLCBlbmNvZGluZyk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6YWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCit2b2lkIFN0eWxlU2hlZXRJbnRl
cm5hbDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCiB7
Ci0gICAgRGVxdWU8Q1NTU3R5bGVTaGVldCo+IHN0eWxlU2hlZXRRdWV1ZTsKKyAgICBEZXF1ZTxT
dHlsZVNoZWV0SW50ZXJuYWwqPiBzdHlsZVNoZWV0UXVldWU7CiAgICAgc3R5bGVTaGVldFF1ZXVl
LmFwcGVuZCh0aGlzKTsKIAogICAgIHdoaWxlICghc3R5bGVTaGVldFF1ZXVlLmlzRW1wdHkoKSkg
ewotICAgICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRh
a2VGaXJzdCgpOworICAgICAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0UXVldWUudGFrZUZpcnN0KCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bV9pbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gc3R5bGVTaGVldC0+bV9pbXBv
cnRSdWxlc1tpXS5nZXQoKTsKQEAgLTQ4NiwyNSArMzk5LDE1OCBAQCB2b2lkIENTU1N0eWxlU2hl
ZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVCiAgICAgfQogfQogCi1DU1NJbXBvcnRSdWxlKiBDU1NT
dHlsZVNoZWV0OjplbnN1cmVDU1NPTVdyYXBwZXIoU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxl
KQorU3R5bGVTaGVldEludGVybmFsKiBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0eWxlU2hl
ZXQoKSBjb25zdAogewotICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbXBvcnRSdWxl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgaWYgKG1faW1wb3J0UnVsZXNbaV0gPT0gaW1wb3J0
UnVsZSkKLSAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGl0
ZW0oaSkpOwotICAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQo
KSA6IDA7CiB9CiAKLUNTU0ltcG9ydFJ1bGUqIENTU1N0eWxlU2hlZXQ6Om93bmVyUnVsZSgpIGNv
bnN0IAoteyAgCi0gICAgcmV0dXJuIHBhcmVudFN0eWxlU2hlZXQoKSA/IHBhcmVudFN0eWxlU2hl
ZXQoKS0+ZW5zdXJlQ1NTT01XcmFwcGVyKG1fb3duZXJSdWxlKSA6IDA7IAorQ1NTU3R5bGVTaGVl
dDo6Q1NTU3R5bGVTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVl
dCwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKQorICAgIDogbV9pbnRlcm5hbChzdHlsZVNoZWV0
KQorICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQorICAgICwgbV9vd25lclJ1bGUob3duZXJSdWxl
KQorewogfQogCi1DU1NTdHlsZVNoZWV0KiBDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QKK0NTU1N0eWxlU2hlZXQ6On5DU1NTdHlsZVNoZWV0KCkKIHsKLSAgICBBU1NFUlQo
aXNDU1NTdHlsZVNoZWV0KCkpOwotICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxl
LT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOworICAgIC8vIEZvciBzdHlsZSBydWxlcyBvdXRzaWRl
IHRoZSBkb2N1bWVudCwgLnBhcmVudFN0eWxlU2hlZXQgY2FuIGJlY29tZSBudWxsIGV2ZW4gaWYg
dGhlIHN0eWxlIHJ1bGUKKyAgICAvLyBpcyBzdGlsbCBvYnNlcnZhYmxlIGZyb20gSmF2YVNjcmlw
dC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiAucGFyZW50Tm9kZSBmb3Igbm9kZXMsIGJ1
dAorICAgIC8vIGl0J3Mgbm90IGlkZWFsIGJlY2F1c2UgaXQgbWFrZXMgdGhlIENTU09NJ3MgYmVo
YXZpb3IgZGVwZW5kIG9uIHRoZSB0aW1pbmcgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKKyAgICAgICAg
ICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+c2V0UGFyZW50U3R5bGVTaGVldCgwKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxl
ZCkKK3sgCisgICAgaWYgKGRpc2FibGVkID09IG1faXNEaXNhYmxlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1faXNEaXNhYmxlZCA9IGRpc2FibGVkOyAKKyAgICBtX2ludGVybmFsLT5zdHlsZVNo
ZWV0Q2hhbmdlZCgpOworfQorCit1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjpsZW5ndGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5ydWxlQ291bnQoKTsKK30KKworQ1NTUnVsZSog
Q1NTU3R5bGVTaGVldDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICB1bnNpZ25lZCBydWxl
Q291bnQgPSBsZW5ndGgoKTsKKyAgICBpZiAoaW5kZXggPj0gcnVsZUNvdW50KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQor
ICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuZ3JvdyhydWxlQ291bnQpOworICAgIEFT
U0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IHJ1bGVDb3VudCk7CisgICAg
CisgICAgUmVmUHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
W2luZGV4XTsKKyAgICBpZiAoIWNzc1J1bGUpCisgICAgICAgIGNzc1J1bGUgPSBtX2ludGVybmFs
LT5jcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIoaW5kZXgsIHRoaXMpOworICAgIHJldHVybiBj
c3NSdWxlLmdldCgpOworfQorCitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNoZWV0
OjpydWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBtX2ludGVybmFsLT5maW5hbFVSTCgpOworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1faW50ZXJuYWwtPmZpbmREb2N1bWVudCgpOworICAgIGlm
ICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gSUUgYmVoYXZp
b3IuCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBub25DaGFyc2V0UnVsZXMgPSBTdGF0
aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3Ro
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVDb3VudDsgKytpKSB7CisgICAg
ICAgIENTU1J1bGUqIHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBpZiAocnVsZS0+aXNDaGFyc2V0
UnVsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5vbkNoYXJzZXRSdWxlcy0+
cnVsZXMoKS5hcHBlbmQocnVsZSk7CisgICAgfQorICAgIHJldHVybiBub25DaGFyc2V0UnVsZXMu
cmVsZWFzZSgpOworfQorCit1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0
IFN0cmluZyYgcnVsZVN0cmluZywgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIEFTU0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpIHx8IG1fY2hp
bGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gbV9pbnRlcm5hbC0+cnVsZUNvdW50KCkpOwor
CisgICAgZWMgPSAwOworICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKSB7CisgICAgICAgIGVjID0g
SU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDU1NQYXJzZXIg
cChtX2ludGVybmFsLT5jc3NQYXJzZXJNb2RlKCkpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiBydWxlID0gcC5wYXJzZVJ1bGUobV9pbnRlcm5hbC5nZXQoKSwgcnVsZVN0cmluZyk7CisKKyAg
ICBpZiAoIXJ1bGUpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgYm9vbCBzdWNjZXNzID0gbV9pbnRlcm5hbC0+d3JhcHBlckluc2VydFJ1
bGUocnVsZSwgaW5kZXgpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBlYyA9IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSAgICAgICAgCisgICAg
aWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7CisgICAg
cmV0dXJuIGluZGV4OworfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUodW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnMuaXNFbXB0eSgpIHx8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkg
PT0gbV9pbnRlcm5hbC0+cnVsZUNvdW50KCkpOworCisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgp
KSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOworCisgICAgaWYgKCFt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVudFN0eWxlU2hlZXQoMCk7CisgICAgICAgIG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUoaW5kZXgpOworICAgIH0KK30KKworaW50IENT
U1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5n
JiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnNlcnRSdWxl
KHNlbGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIgfSIsIGluZGV4LCBlYyk7CisgICAgCisgICAg
Ly8gQXMgcGVyIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uLCBhbHdheXMgcmV0dXJuIC0xLgorICAg
IHJldHVybiAtMTsKK30KKworaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5n
JiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgcmV0dXJuIGFkZFJ1bGUoc2VsZWN0b3IsIHN0eWxlLCBsZW5ndGgoKSwgZWMpOworfQorCisK
K1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKCkKK3sKKyAg
ICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZpbmFsVVJMKCk7CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9pbnRlcm5hbC0+ZmluZERvY3VtZW50KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgp
ICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1
cmwpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIp
CisgICAgICAgIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVl
dENTU1J1bGVMaXN0KHRoaXMpKTsKKyAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5n
ZXQoKTsKK30KKworTWVkaWFMaXN0KiBDU1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoreyAK
KyAgICBpZiAoIW1faW50ZXJuYWwtPm1lZGlhUXVlcmllcygpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bWVkaWFRdWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChj
b25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlzKSk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIENT
U1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIG1f
b3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7IAorfQorCit2
b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpCit7CisgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmNsZWFyKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBDU1NJbXBvcnRSdWxlOwogY2xhc3Mg
Q1NTUGFyc2VyOwogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1J1bGVMaXN0OworY2xhc3MgQ1NT
U3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRSZXNv
dXJjZUxvYWRlcjsKIGNsYXNzIERvY3VtZW50OwpAQCAtNDEsNTMgKzQyLDQxIEBAIHN0cnVjdCBD
U1NOYW1lc3BhY2U7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIENTU1N0
eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0SW50ZXJuYWw+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQq
PigwKSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4o
MCksIFN0cmluZygpLCBLVVJMKCksIFN0cmluZygpKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBvd25lck5vZGUpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGUoTm9kZSogb3duZXJOb2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KG93bmVyTm9k
ZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJOb2RlLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJp
bmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVh
dGUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25l
ck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0eWxlU2hlZXRJbnRlcm5hbChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBm
aW5hbFVSTCwgY2hhcnNldCkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0PiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYg
b3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGUoU3R5bGVS
dWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtV
UkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmlu
YWxVUkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0
SW50ZXJuYWwob3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKICAg
ICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlSW5saW5lKE5v
ZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmluYWxVUkwpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGVJbmxpbmUoTm9kZSogb3duZXJOb2RlLCBjb25z
dCBLVVJMJiBmaW5hbFVSTCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
U3R5bGVTaGVldChvd25lck5vZGUsIGZpbmFsVVJMLnN0cmluZygpLCBmaW5hbFVSTCwgU3RyaW5n
KCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3du
ZXJOb2RlLCBmaW5hbFVSTC5zdHJpbmcoKSwgZmluYWxVUkwsIFN0cmluZygpKSk7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Q1NTU3R5bGVTaGVldCgpOwotCi0gICAgdmlydHVhbCBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3Qg
U3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSUUg
RXh0ZW5zaW9ucwotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzKCk7Ci0gICAgaW50
IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
cmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVs
ZShpbmRleCwgZWMpOyB9CisgICAgflN0eWxlU2hlZXRJbnRlcm5hbCgpOwogCiAgICAgdm9pZCBh
ZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJpKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5h
bWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CiAKICAgICB2b2lkIHN0eWxlU2hl
ZXRDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5n
JiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpOworICAgIGJvb2wgcGFyc2VTdHJpbmco
Y29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpOwogCiAgICAgYm9v
bCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlLCBpbnQgc3Rh
cnRMaW5lTnVtYmVyKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKTsKKyAgICBib29s
IGlzTG9hZGluZygpIGNvbnN0OwogCiAgICAgdm9pZCBjaGVja0xvYWRlZCgpOwogICAgIHZvaWQg
c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CkBAIC0xMTUsMzggKzEwNCw1MyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNsZWFyUnVsZXMoKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwotICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwotCiAgICAgLy8gUnVsZXMgb3Ro
ZXIgdGhhbiBAY2hhcnNldCBhbmQgQGltcG9ydC4KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkUnVsZXM7
IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1bGVzOyB9CiAKLSAgICB2aXJ0dWFsIE1lZGlh
TGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsKLQogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlh
UXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9p
ZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CiAKICAgICB2b2lk
IG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICAKLSAg
ICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0OworICAgIE5vZGUq
IG93bmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJOb2RlOyB9CisgICAgdm9pZCBjbGVh
ck93bmVyTm9kZSgpIHsgbV9vd25lck5vZGUgPSAwOyB9CisgICAgU3R5bGVSdWxlSW1wb3J0KiBv
d25lclJ1bGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyUnVsZTsgfQogICAgIHZvaWQgY2xlYXJP
d25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQogICAgIAotICAgIENTU0ltcG9ydFJ1bGUq
IGVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJbXBvcnQqKTsKKyAgICAvLyBOb3RlIHRoYXQg
aHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRlZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQg
dG8KKyAgICAvLyB0aGlzIHN0eWxlIHNoZWV0LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0
IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKKyAgICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3
aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1ZSBmb3Igc2VjdXJpdHkpLgorICAgIFN0cmluZyBv
cmlnaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KKyAgICBTdHJpbmcg
dGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgdm9pZCBzZXRUaXRsZShjb25z
dCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRsZTsgfQorICAgIAorICAgIHZvaWQgc2V0
RmluYWxVUkwoY29uc3QgS1VSTCYgZmluYWxVUkwpIHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9
CisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9
CisgICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgQ1NTU3R5bGVTaGVl
dChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIENTU1N0eWxlU2hlZXQoU3R5
bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0
IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIHVuc2lnbmVkIHJ1
bGVDb3VudCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgpOworICAgIHZvaWQgd3JhcHBlckRl
bGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0gICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVT
aGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQorICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3Jl
YXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4LCBDU1NTdHlsZVNoZWV0KiBw
YXJlbnRXcmFwcGVyKTsKKworcHJpdmF0ZToKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwoTm9kZSog
b3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVS
TCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwoU3R5bGVS
dWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtV
UkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIAogICAgIHZvaWQgY2xl
YXJDaGFyc2V0UnVsZSgpOwogICAgIGJvb2wgaGFzQ2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVy
biAhbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5pc051bGwoKTsgfQogCi0gICAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQgaW5kZXgpOwot
CisgICAgTm9kZSogbV9vd25lck5vZGU7CiAgICAgU3R5bGVSdWxlSW1wb3J0KiBtX293bmVyUnVs
ZTsKKworICAgIFN0cmluZyBtX29yaWdpbmFsVVJMOworICAgIEtVUkwgbV9maW5hbFVSTDsKKyAg
ICBTdHJpbmcgbV90aXRsZTsKKwogICAgIFN0cmluZyBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxl
OwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+IG1faW1wb3J0UnVsZXM7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IG1fY2hpbGRSdWxlczsKQEAgLTE1OSw3
ICsxNjMsNjIgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNVc2VyU3R5bGVTaGVldCA6IDE7CiAg
ICAgYm9vbCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlciA6IDE7CiAgICAgYm9vbCBt
X2RpZExvYWRFcnJvck9jY3VyIDogMTsKK307CisKK2NsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJs
aWMgU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHNoZWV0LCBDU1NJbXBvcnRS
dWxlKiBvd25lclJ1bGUgPSAwKSAKKyAgICB7IAorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyUnVsZSkpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkNTU1N0eWxlU2hlZXQoKTsKKworICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+b3duZXJOb2RlKCk7IH0KKyAgICB2
aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+b3JpZ2luYWxV
UkwoKTsgfSAgCisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2ludGVybmFsLT50aXRsZSgpOyB9CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0Rpc2FibGVkOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldERpc2FibGVkKGJvb2wpIE9WRVJSSURFOworICAgIAorICAgIFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IGNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQgaW5zZXJ0UnVsZShjb25zdCBTdHJpbmcm
IHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkZWxldGVS
dWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgCisgICAgLy8gSUUgRXh0
ZW5zaW9ucworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzKCk7CisgICAgaW50IGFk
ZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVt
b3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShp
bmRleCwgZWMpOyB9CisgICAgCisgICAgLy8gRm9yIENTU1J1bGVMaXN0LgorICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OworICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZFUlJJREUgeyBtX2ludGVybmFsLT5j
bGVhck93bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyUnVsZTsgfQorICAgIHZpcnR1YWwgS1VS
TCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+YmFzZVVSTCgp
OyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faW50ZXJuYWwtPmlzTG9hZGluZygpOyB9CisgICAgCisgICAgdm9pZCBjbGVhck93bmVyUnVs
ZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsg
bV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsgfQorICAgIERvY3VtZW50KiBmaW5kRG9j
dW1lbnQoKSB7IHJldHVybiBtX2ludGVybmFsLT5maW5kRG9jdW1lbnQoKTsgfQorICAgIAorICAg
IHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CisKKyAgICBTdHlsZVNoZWV0SW50
ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIENTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+
LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpOworCisgICAgdmlydHVhbCBib29sIGlzQ1NTU3R5
bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBl
KCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQorICAgIAorICAgIFJlZlB0cjxTdHlsZVNo
ZWV0SW50ZXJuYWw+IG1faW50ZXJuYWw7CisgICAgYm9vbCBtX2lzRGlzYWJsZWQ7CiAKKyAgICBD
U1NJbXBvcnRSdWxlKiBtX293bmVyUnVsZTsKICAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NT
UnVsZT4gPiBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnM7CiAgICAgbXV0YWJsZSBPd25QdHI8Q1NT
UnVsZUxpc3Q+IG1fcnVsZUxpc3RDU1NPTVdyYXBwZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIENTU1ZhbHVlOjpUeXBlIENT
U1ZhbHVlOjpjc3NWYWx1ZVR5cGUoKSAKICAgICByZXR1cm4gQ1NTX0NVU1RPTTsKIH0KIAotdm9p
ZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVy
bHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlOjphZGRT
dWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVT
aGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxs
ZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgU3R5
bGVTaGVldEludGVybmFsOwogICAgIAogLy8gRklYTUU6IFRoZSBjdXJyZW50IENTU1ZhbHVlIGFu
ZCBzdWJjbGFzc2VzIHNob3VsZCBiZSB0dXJuZWQgaW50byBpbnRlcm5hbCB0eXBlcyAoU3R5bGVW
YWx1ZSkuCiAvLyBUaGUgZmV3IHN1YnR5cGVzIHRoYXQgYXJlIGFjdHVhbGx5IGV4cG9zZWQgaW4g
Q1NTT00gY2FuIGJlIHNlZW4gaW4gdGhlIGNsb25lRm9yQ1NTT00oKSBmdW5jdGlvbi4KQEAgLTEw
Nyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjbG9uZUZv
ckNTU09NKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgYWRkU3VicmVz
b3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJu
YWwqKTsKIAogcHJvdGVjdGVkOgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNw
cAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBTdHJpbmcgQ1NTVmFsdWVMaXN0
OjpjdXN0b21Dc3NUZXh0KCkgY29uCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQog
Ci12b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8
S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1Zh
bHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMs
IGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBzaXplX3Qgc2l6
ZSA9IG1fdmFsdWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNv
bnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAgICAgCiAgICAg
UGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNsb25lRm9yQ1NTT00oKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQbwogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6
Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgQ1NTU3R5bGVT
aGVldCogY29udGV4dFN0eWxlU2hlZXQpCitQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTVmFs
dWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIC8vIEp1c3Qgd2lw
ZSBvdXQgdGhlIGNhY2hlIGFuZCBzdGFydCByZWJ1aWxkaW5nIGlmIGl0IGdldHMgdG9vIGJpZy4K
ICAgICBjb25zdCBpbnQgbWF4aW11bUZvbnRGYWNlQ2FjaGVTaXplID0gMTI4OwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTEgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTVmFsdWVMaXN0OworY2xhc3MgU3R5bGVT
aGVldEludGVybmFsOwogCiBjbGFzcyBDU1NWYWx1ZVBvb2wgewogcHVibGljOgotICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBTdHls
ZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjcmVhdGVGb250RmFtaWx5VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAg
UGFzc1JlZlB0cjxDU1NJbmhlcml0ZWRWYWx1ZT4gY3JlYXRlSW5oZXJpdGVkVmFsdWUoKSB7IHJl
dHVybiBtX2luaGVyaXRlZFZhbHVlOyB9CiAgICAgUGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+
IGNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gbV9pbXBsaWNpdEluaXRpYWxW
YWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OnNldAogI2VuZGlmCiAgICAgZWMgPSAwOwogICAgIC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVy
cm9ycyBhbmQgc2V0IGVjLgotICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4
dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisgICAgbV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNsYXJh
dGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgpLT5pbnRlcm5hbCgpKTsKIAogICAgIGRpZE11
dGF0ZSgpOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCkBAIC0yMTQsNyArMjE0LDcg
QEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldAogICAgICAgICByZXR1
cm47CiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBm
YWxzZSkgIT0gbm90Rm91bmQ7CiAgICAgZWMgPSAwOwotICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJv
cGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRl
eHRTdHlsZVNoZWV0KCkpOworICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkt
PmludGVybmFsKCkpOwogICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgIC8vIENTUyBET00gcmVx
dWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBhcnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0
b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY+LgpAQCAtMjYxLDcgKzI2MSw3IEBA
IHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXQKICAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKICNlbmRpZgogICAgIGVjID0g
MDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKyAgICBib29sIGNo
YW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1w
b3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdl
ZCkgewogICAgICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICsz
Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1By
b3BlcnR5OwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5
bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlZEVs
ZW1lbnQ7CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBD
U1NTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVBy
b3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgU3R5
bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2kKICAgICByZXR1cm4gcHJvcGVydHkgPyBw
cm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCiti
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5h
bCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4g
ZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vj
a28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25z
aXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0IHRoZSBzYW1lLgpAQCAtNTMxLDcg
KzUzMSw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHIKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9u
KGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0
eWxlU2hlZXQpCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3Qg
U3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KQogewogICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwogICAgIENTU1BhcnNlciBwYXJz
ZXIoY3NzUGFyc2VyTW9kZSgpKTsKQEAgLTc5Myw3ICs3OTMsNyBAQCB2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAgfQogfQogCi12b2lkIFN0eWxlUHJvcGVydHlT
ZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBDU1NT
dHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRk
U3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIFN0eWxlU2hlZXRJ
bnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3Bl
cnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCShyZXZpc2lvbiAxMTM4NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0
aGFuZDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIAogY2xhc3MgU3R5bGVQcm9wZXJ0eVNl
dCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJvcGVydHlTZXQ+IHsKIHB1YmxpYzoKQEAgLTY4
LDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KENTU1Byb3Bl
cnR5SUQpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgZXhwYW5kIHNob3J0aGFuZCBwcm9wZXJ0aWVz
IGludG8gbXVsdGlwbGUgcHJvcGVydGllcy4KLSAgICBib29sIHNldFByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIENTU1N0
eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNl
LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CiAgICAgdm9pZCBz
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBv
cnRhbnQgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBkbyBub3QuIEZJWE1FOiBUaGlzIGlzIHRv
byBtZXNzeSwgd2UgY2FuIGRvIGJldHRlci4KQEAgLTc3LDcgKzc4LDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5U
ZXh0ID0gMCk7CiAKLSAgICB2b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHls
ZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgdm9p
ZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVT
aGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAKICAgICB2b2lkIGFkZFBhcnNlZFBy
b3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqLCBpbnQgbnVtUHJvcGVydGllcyk7CiAgICAgdm9p
ZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYpOwpAQCAtOTEsNyArOTIsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDU1NQYXJzZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSkgeyBtX2Nzc1BhcnNlck1vZGUgPSBjc3NQYXJzZXJNb2RlOyB9CiAgICAgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyTW9kZT4obV9jc3NQYXJzZXJNb2RlKTsgfQogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNo
ZWV0KTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAKICAgICBQYXNzUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBjb25zdDsKICAgICAvLyBVc2VkIGJ5IFN0eWxl
ZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDQ5ICsyMCwxMCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKIAotI2luY2x1ZGUgIkNTU0lt
cG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVT
aGVldDo6U3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFs
VVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAgICA6IG1fZGlzYWJsZWQoZmFsc2UpCi0gICAg
LCBtX293bmVyTm9kZShwYXJlbnROb2RlKQotICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVS
TCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCi17Ci19Ci0KLVN0eWxlU2hlZXQ6OlN0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwpCi0g
ICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9vd25lck5vZGUoMCkKLSAgICAsIG1fb3Jp
Z2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQotewotfQot
CiBTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCiB7CiB9CiAKLUtVUkwgU3R5bGVTaGVldDo6YmFz
ZVVSTCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZpbmFsVVJMLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gbV9maW5hbFVSTDsKLSAgICBpZiAoU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJl
bnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFzZVVSTCgpOwot
ICAgIGlmICghbV9vd25lck5vZGUpCi0gICAgICAgIHJldHVybiBLVVJMKCk7Ci0gICAgcmV0dXJu
IG1fb3duZXJOb2RlLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7Ci19Ci0KLXZvaWQgU3R5bGVTaGVl
dDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICAgbV9kaXNhYmxlZCA9IGRpc2Fi
bGVkOwotICAgICBpZiAoaXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICBzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4odGhpcyktPnN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci19Ci0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNDggKzM5LDIxIEBAIGNsYXNz
IFN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHkKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TdHlsZVNoZWV0KCk7CiAKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
aXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7Ci0KLSAgICBOb2RlKiBvd25l
ck5vZGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZTsgfQotICAgIHZvaWQgY2xlYXJPd25l
ck5vZGUoKSB7IG1fb3duZXJOb2RlID0gMDsgfQotCi0gICAgdmlydHVhbCBDU1NJbXBvcnRSdWxl
KiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KKyAgICB2aXJ0dWFsIGJvb2wgZGlz
YWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wpID0g
MDsKKyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRlZCB0aGUgcmVkaXJlY3Qg
Y2hhaW4gdGhhdCBsZWQgdG8KLSAgICAvLyB0aGlzIHN0eWxlIHNoZWV0LiBUaGlzIHByb3BlcnR5
IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKLSAgICAvLyB0aGUgSmF2YVNj
cmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1ZSBmb3Igc2VjdXJpdHkp
LgotICAgIGNvbnN0IFN0cmluZyYgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxVUkw7
IH0KLQotICAgIHZvaWQgc2V0RmluYWxVUkwoY29uc3QgS1VSTCYgZmluYWxVUkwpIHsgbV9maW5h
bFVSTCA9IGZpbmFsVVJMOyB9Ci0gICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbmFsVVJMOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJUaXRsZTsgfQotICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiBzKSB7
IG1fc3RyVGl0bGUgPSBzOyB9CisgICAgdmlydHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIE1lZGlh
TGlzdCogbWVkaWEoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAgICB2aXJ0dWFsIFN0cmluZyB0
eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9
IENTU1N0cmljdE1vZGUpID0gMDsKIAorICAgIHZpcnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJS
dWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVyTm9k
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0
eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1hT
TFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgS1VSTCBiYXNlVVJM
KCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHlsZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwg
Y29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBmaW5hbFVSTCk7Ci0gICAgU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGZpbmFsVVJMKTsKLQotcHJpdmF0ZToK
LSAgICBib29sIG1fZGlzYWJsZWQ7Ci0gICAgTm9kZSogbV9vd25lck5vZGU7Ci0gICAgU3RyaW5n
IG1fb3JpZ2luYWxVUkw7Ci0gICAgS1VSTCBtX2ZpbmFsVVJMOwotICAgIFN0cmluZyBtX3N0clRp
dGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDggKzEwOSw5IEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6aW5zZXJ0UnVsZSgK
IHsKICAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2tleWZy
YW1lc1J1bGUtPmtleWZyYW1lcygpLnNpemUoKSk7CiAKLSAgICBDU1NQYXJzZXIgcChjc3NQYXJz
ZXJNb2RlKCkpOwotICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBrZXlmcmFtZSA9IHAucGFyc2VL
ZXlmcmFtZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxlVGV4dCk7CisgICAgQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICBDU1NQYXJzZXIgcGFy
c2VyKHN0eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jc3NQYXJzZXJNb2RlKCkg
OiBDU1NTdHJpY3RNb2RlKTsKKyAgICBSZWZQdHI8U3R5bGVLZXlmcmFtZT4ga2V5ZnJhbWUgPSBw
YXJzZXIucGFyc2VLZXlmcmFtZVJ1bGUoc3R5bGVTaGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFs
KCkgOiAwLCBydWxlVGV4dCk7CiAgICAgaWYgKCFrZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9u
IDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsOSBAQCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IERPTUltcGxlbWVudGF0CiB7CiAgICAgLy8gRklYTUU6IFRpdGxlIHNob3VsZCBiZSBzZXQuCiAg
ICAgLy8gRklYTUU6IE1lZGlhIGNvdWxkIGhhdmUgd3Jvbmcgc3ludGF4LCBpbiB3aGljaCBjYXNl
IHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uCi0gICAgUmVmUHRyPENTU1N0eWxlU2hl
ZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gc2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSgpOwogICAgIHNo
ZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlw
dGlvblN5bnRheChtZWRpYSkpOwotICAgIHJldHVybiBzaGVldC5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVldCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCB2YWxpZFhNTE1JTUVUeXBlQ2hhcnMgPSAiWzAtOWEtekEtWl9cXC0rfiEkXFxee318
LiUnYCMmKl0iOyAvLyBwZXIgUkZDczogMzAyMywgMjA0NQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CkBAIC0yNTU3LDcgKzI1NTcsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAg
ICAgICAgbV9iYXNlVVJMID0gS1VSTCgpOwogCiAgICAgaWYgKG1fZWxlbVNoZWV0KQotICAgICAg
ICBtX2VsZW1TaGVldC0+c2V0RmluYWxVUkwobV9iYXNlVVJMKTsKKyAgICAgICAgbV9lbGVtU2hl
ZXQtPmludGVybmFsKCktPnNldEZpbmFsVVJMKG1fYmFzZVVSTCk7CiAgICAgCiAgICAgaWYgKCFl
cXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJhc2VVUkwsIG1fYmFzZVVSTCkpIHsK
ICAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMgYW55IHJlbGF0aXZlIHZpc2l0ZWQg
bGlua3MuCkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBib29sIERvY3VtZW50OjpjYW5CZUFjY2Vzc2Vk
QnlFdmVyeUFuY2VzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNTU1N0eWxlU2hlZXQqIERvY3Vt
ZW50OjpwYWdlVXNlclNoZWV0KCkKK1N0eWxlU2hlZXRJbnRlcm5hbCogRG9jdW1lbnQ6OnBhZ2VV
c2VyU2hlZXQoKQogewogICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCiAgICAgICAgIHJldHVybiBt
X3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CkBAIC0yNzAyLDcgKzI3MDIsNyBAQCBDU1NTdHlsZVNoZWV0
KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAg
IC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUgaXQuCi0gICAgbV9wYWdlVXNlclNoZWV0ID0g
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRoaXMsIHNldHRpbmdzKCktPnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oKSk7CisgICAgbV9wYWdlVXNlclNoZWV0ID0gU3R5bGVTaGVldEludGVybmFs
OjpjcmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigp
KTsKICAgICBtX3BhZ2VVc2VyU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAgICAg
bV9wYWdlVXNlclNoZWV0LT5wYXJzZVN0cmluZyh1c2VyU2hlZXRUZXh0LCBzdHJpY3RUb0NTU1Bh
cnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5n
ZXQoKTsKQEAgLTI3MjMsNyArMjcyMyw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VVc2Vy
U2hlZXQoKQogICAgICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBEb2N1bWVu
dDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0Citjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAog
ewogICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVldENhY2hlVmFsaWQpCiAgICAgICAgIHJldHVy
biBtX3BhZ2VHcm91cFVzZXJTaGVldHMuZ2V0KCk7CkBAIC0yNzQ4LDExICsyNzQ4LDExIEBAIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG8KICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVz
UGF0dGVybnModXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgpKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBwYXJzZWRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0
PERvY3VtZW50Kj4odGhpcyksIHNoZWV0LT51cmwoKSk7CisgICAgICAgICAgICBSZWZQdHI8U3R5
bGVTaGVldEludGVybmFsPiBwYXJzZWRTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRl
SW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPih0aGlzKSwgc2hlZXQtPnVybCgpKTsKICAgICAg
ICAgICAgIHBhcnNlZFNoZWV0LT5zZXRJc1VzZXJTdHlsZVNoZWV0KHNoZWV0LT5sZXZlbCgpID09
IFVzZXJTdHlsZVVzZXJMZXZlbCk7CiAgICAgICAgICAgICBwYXJzZWRTaGVldC0+cGFyc2VTdHJp
bmcoc2hlZXQtPnNvdXJjZSgpLCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgp
KSk7CiAgICAgICAgICAgICBpZiAoIW1fcGFnZUdyb3VwVXNlclNoZWV0cykKLSAgICAgICAgICAg
ICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiA+KTsKKyAgICAgICAgICAgICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAg
ICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzLT5hcHBlbmQocGFyc2VkU2hlZXQucmVsZWFz
ZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3NzYsMTAgKzI3NzYsMTAgQEAgdm9pZCBEb2N1
bWVudDo6dXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0cwogICAgICAgICBzdHlsZVNlbGVjdG9yQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YWRkVXNl
clNoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gdXNlclNoZWV0KQordm9pZCBEb2N1bWVu
dDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiB1c2VyU2hlZXQp
CiB7CiAgICAgaWYgKCFtX3VzZXJTaGVldHMpCi0gICAgICAgIG1fdXNlclNoZWV0cyA9IGFkb3B0
UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4pOworICAgICAgICBtX3VzZXJT
aGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4p
OwogICAgIG1fdXNlclNoZWV0cy0+YXBwZW5kKHVzZXJTaGVldCk7CiAgICAgc3R5bGVTZWxlY3Rv
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9CkBAIC0yNzg3LDcgKzI3ODcsNyBA
QCB2b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxDCiBDU1NTdHlsZVNoZWV0
KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsKICAgICBpZiAoIW1fZWxlbVNoZWV0KQotICAg
ICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jh
c2VVUkwpOworICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShTdHls
ZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpKTsKICAgICByZXR1
cm4gbV9lbGVtU2hlZXQuZ2V0KCk7CiB9CiAKQEAgLTMzMTYsMTAgKzMzMTYsOCBAQCB2b2lkIERv
Y3VtZW50Ojpjb2xsZWN0QWN0aXZlU3R5bGVzaGVldHMoCiAgICAgfQogfQogCi1ib29sIERvY3Vt
ZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhDU1NTdHlsZVNoZWV0
KiBzdHlsZXNoZWV0KQorYm9vbCBEb2N1bWVudDo6dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVz
U3R5bGVSZWNhbGMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNoZWV0KQogewotICAgIGlmIChz
dHlsZXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gU2Vl
IGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJlIHNjb3BlZCB0byBzb21lIHNwZWNpZmljIGlk
cyBvciBjbGFzc2VzLgogICAgIC8vIFRoZW4gdGVzdCBpZiB3ZSBhY3R1YWxseSBoYXZlIGFueSBv
ZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9tZW50LgogICAgIC8vIEZJWE1FOiBFdmVuIHdl
IGlmIHdlIGZpbmQgc29tZSwgd2UgY291bGQganVzdCBpbnZhbGlkYXRlIHRob3NlIHN1YnRyZWVz
IGluc3RlYWQgb2YgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUgc3R5bGUuCkBAIC0zMzkxLDcgKzMz
ODksOSBAQCB2b2lkIERvY3VtZW50OjphbmFseXplU3R5bGVzaGVldENoYW5nZShTCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENvdW50OyBpIDwgbmV3U3R5bGVzaGVldENvdW50
OyArK2kpIHsKICAgICAgICAgaWYgKCFuZXdTdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0
UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVz
aGVldHNbaV0uZ2V0KCkpKSkKKyAgICAgICAgaWYgKG5ld1N0eWxlc2hlZXRzW2ldLT5kaXNhYmxl
ZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNo
ZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5
bGVzaGVldHNbaV0uZ2V0KCkpLT5pbnRlcm5hbCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMTI3LDYg
KzEyNyw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFNlZ21lbnRlZFN0
cmluZzsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hl
ZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgVGV4dDsKIGNsYXNzIFRl
eHRSZXNvdXJjZURlY29kZXI7CkBAIC02MjMsMTYgKzYyNCwxNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBjYW5OYXZpZ2F0ZShGcmFtZSogdGFyZ2V0RnJhbWUpOwogICAgIGJvb2wgY2FuQmVBY2Nlc3Nl
ZEJ5RXZlcnlBbmNlc3RvckZyYW1lKCk7CiAKLSAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNo
ZWV0KCk7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYWdlVXNlclNoZWV0KCk7CiAgICAgdm9p
ZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICB2b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsK
IAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNl
clNoZWV0cygpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhclBhZ2VH
cm91cFVzZXJTaGVldHMoKTsKICAgICB2b2lkIHVwZGF0ZVBhZ2VHcm91cFVzZXJTaGVldHMoKTsK
IAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2Vy
U2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2hlZXRzLmdldCgpOyB9Ci0gICAgdm9pZCBh
ZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiB1c2VyU2hlZXQpOworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiBkb2N1bWVudFVzZXJTaGVl
dHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTaGVldHMuZ2V0KCk7IH0KKyAgICB2b2lkIGFkZFVz
ZXJTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gdXNlclNoZWV0KTsKIAogICAg
IENTU1N0eWxlU2hlZXQqIGVsZW1lbnRTaGVldCgpOwogICAgIApAQCAtMTE4MSw3ICsxMTgyLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFN0eWxl
U2VsZWN0b3JVcGRhdGVGbGFnKTsKICAgICB2b2lkIGNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhW
ZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKLSAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hl
ZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxlU2hlZXQqKTsKKyAgICBib29sIHRlc3RBZGRl
ZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxlU2hlZXRJbnRlcm5hbCopOwogICAg
IHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJl
cXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCBib29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7
CiAKICAgICB2b2lkIGRlbGV0ZUN1c3RvbUZvbnRzKCk7CkBAIC0xMjU3LDkgKzEyNTgsOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlOwogCiAgICAg
UmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fZWxlbVNoZWV0OwotICAgIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBtX3BhZ2VVc2VyU2hlZXQ7Ci0gICAgbXV0YWJsZSBPd25QdHI8VmVjdG9yPFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hlZXRzOwotICAgIE93blB0cjxWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gPiBtX3VzZXJTaGVldHM7CisgICAgUmVmUHRyPFN0
eWxlU2hlZXRJbnRlcm5hbD4gbV9wYWdlVXNlclNoZWV0OworICAgIG11dGFibGUgT3duUHRyPFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hlZXRz
OworICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiA+IG1fdXNl
clNoZWV0czsKICAgICBtdXRhYmxlIGJvb2wgbV9wYWdlR3JvdXBVc2VyU2hlZXRDYWNoZVZhbGlk
OwogCiAgICAgYm9vbCBtX3ByaW50aW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAKKyNpbmNsdWRlICJD
U1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC04Miw3ICs4Myw3IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnVw
ZGF0ZUlubGluZVMKICAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0
OjpjcmVhdGUoKTsKICAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldENTU1BhcnNlck1vZGUo
c3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKICAgICB9Ci0gICAgbV9pbmxpbmVTdHls
ZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVu
dFNoZWV0KCkpOworICAgIG1faW5saW5lU3R5bGVEZWNsLT5wYXJzZURlY2xhcmF0aW9uKHRleHQs
IGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAog
dm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlubGluZVN0eWxlKFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSwxNSArMjExLDE2IEBA
IHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVMKICAgICB9CiAKICAgICBB
U1NFUlQobV9pc0NTUyk7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1NoZWV0ID0gQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwotICAgIG1f
c2hlZXQgPSBuZXdTaGVldDsKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBuZXdTaGVl
dCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJz
ZXQpOworICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUobmV3U2hlZXQpOwogICAg
IC8vIFdlIGRvbid0IG5lZWQgdGhlIGNyb3NzLW9yaWdpbiBzZWN1cml0eSBjaGVjayBoZXJlIGJl
Y2F1c2Ugd2UgYXJlCiAgICAgLy8gZ2V0dGluZyB0aGUgc2hlZXQgdGV4dCBpbiAic3RyaWN0IiBt
b2RlLiBUaGlzIGVuZm9yY2VzIGEgdmFsaWQgQ1NTIE1JTUUKICAgICAvLyB0eXBlLgotICAgIHBh
cnNlU3R5bGVTaGVldChzaGVldC0+c2hlZXRUZXh0KHRydWUpKTsKICAgICBuZXdTaGVldC0+c2V0
VGl0bGUobV90aXRsZSk7CiAgICAgbmV3U2hlZXQtPnNldE1lZGlhUXVlcmllcyhNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGUobV9tZWRpYSkpOwotICAgIG5ld1NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVy
bmF0ZSk7CisgICAgbV9zaGVldC0+c2V0RGlzYWJsZWQobV9hbHRlcm5hdGUpOworCisgICAgcGFy
c2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQodHJ1ZSkpOwogfQogCiAjaWYgRU5BQkxFKFhT
TFQpCkBAIC0yMzMsNyArMjM0LDExIEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRY
U0xTdHlsZVMKIAogdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnBhcnNlU3R5bGVTaGVldChj
b25zdCBTdHJpbmcmIHNoZWV0KQogewotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0LCBD
U1NTdHJpY3RNb2RlKTsKKyAgICBpZiAobV9pc0NTUykKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5pbnRlcm5hbCgpLT5wYXJzZVN0cmluZyhzaGVl
dCwgQ1NTU3RyaWN0TW9kZSk7CisgICAgZWxzZSBpZiAobV9pc1hTTCkKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8WFNMU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5wYXJzZVN0cmluZyhzaGVldCwg
Q1NTU3RyaWN0TW9kZSk7CisKICAgICBpZiAobV9jYWNoZWRTaGVldCkKICAgICAgICAgbV9jYWNo
ZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgIG1fY2FjaGVkU2hlZXQgPSAwOwpAQCAt
MjQxLDcgKzI0Niw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwYXJzZVN0eWxlU2gK
ICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKIAogICAgIGlmIChtX2lzQ1NTKQotICAgICAgICBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obV9zaGVldC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7Cisg
ICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihtX3NoZWV0LmdldCgpKS0+aW50ZXJu
YWwoKS0+Y2hlY2tMb2FkZWQoKTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBlbHNlIGlmIChtX2lz
WFNMKQogICAgICAgICBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4obV9zaGVldC5nZXQoKSkt
PmNoZWNrTG9hZGVkKCk7CkBAIC0yNTMsOCArMjU4LDggQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OnNldENTU1N0eWxlUwogICAgIEFTU0VSVCghbV9jYWNoZWRTaGVldCk7CiAgICAgQVNT
RVJUKCFtX2xvYWRpbmcpOwogICAgIG1fc2hlZXQgPSBzaGVldDsKLSAgICBtX3NoZWV0LT5zZXRU
aXRsZShtX3RpdGxlKTsKLSAgICBtX3NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7Cisg
ICAgc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKG1fdGl0bGUpOworICAgIHNoZWV0LT5zZXRE
aXNhYmxlZChtX2FsdGVybmF0ZSk7CiB9CiAKIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpv
ZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTYgKzE2NCwxNyBAQCB2b2lkIFN0eWxlRWxl
bWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwo
bWVkaWFRdWVyaWVzLmdldCgpKSB8fCBwcmludEV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkp
KSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRkUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAg
ICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAgICAgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsK
LSAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nQXRMaW5lKHRleHQsIHN0cmljdFRvQ1NT
UGFyc2VyTW9kZSghZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKSwgc3RhcnRMaW5lTnVtYmVyKTsK
LSAgICAgICAgICAgIG1fc2hlZXQtPnNldE1lZGlhUXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFz
ZSgpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGUtPnRpdGxlKCkpOworICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJ
bnRlcm5hbDo6Y3JlYXRlKGUsIFN0cmluZygpLCBLVVJMKCksIGRvY3VtZW50LT5pbnB1dEVuY29k
aW5nKCkpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+cGFyc2VTdHJpbmdBdExpbmUodGV4dCwg
c3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVudC0+aW5RdWlya3NNb2RlKCkpLCBzdGFydExp
bmVOdW1iZXIpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlh
UXVlcmllcy5yZWxlYXNlKCkpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+c2V0VGl0bGUoZS0+
dGl0bGUoKSk7CisgICAgICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0
eWxlU2hlZXQpOwogICAgICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAobV9zaGVldCkKLSAgICAgICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsK
KyAgICAgICAgbV9zaGVldC0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBT
dHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFN0
eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVyCiAKIGJvb2wgU3R5bGVkRWxlbWVudDo6
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewotICAgIGJvb2wgY2hhbmdlcyA9IGVuc3Vy
ZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKSk7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVN
dXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBp
bXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBp
ZiAoY2hhbmdlcykKICAgICAgICAgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIGNo
YW5nZXM7CkBAIC0yMjYsNyArMjI2LDcgQEAgYm9vbCBTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxp
bmVTdHlsZVBybwogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7CiAgICAgaWYgKFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5p
bmxpbmVTdHlsZSgpIDogMCkKLSAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICAgICAgaW5saW5l
U3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRT
aGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGF0dHJpYnV0ZU5h
bWVTb3J0KGNvbnN0IHBhaXI8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZz4mIHAxLCBj
b25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmc+JiBwMikKQEAgLTMzMyw1
ICszMzMsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidQogewog
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQorICAgIAordm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9w
ZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzdHlsZS0+c2V0UHJv
cGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGZhbHNlLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQo
KS0+aW50ZXJuYWwoKSk7Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
aAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsNiBAQCBpbmxpbmUgU3R5bGVQcm9wZXJ0
eVNldCogU3R5bGVkRWxlbWVudDo6CiAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJp
YnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6IDA7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBz
dHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgZmFsc2UsIGRvY3VtZW50
KCktPmVsZW1lbnRTaGVldCgpKTsKLX0KLQogfSAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBIVE1MRm9udEVsZW1l
bnQ6OmNvbGxlY3RTdHlsZUZvckF0dAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNv
bG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9yVG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlD
b2xvciwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZhY2VB
dHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhY2VWYWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVu
dCgpLT5lbGVtZW50U2hlZXQoKSkpCisgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0PiBm
b250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhY2VWYWx1ZShhdHRyLT52
YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSkpCiAgICAgICAg
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5
LCBmb250RmFjZVZhbHVlLnJlbGVhc2UoKSkpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxl
bWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKGF0dHIsIHN0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHQK
ICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCi0gICAg
ICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1f
c2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBIVE1M
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQpAQCAtMjg0LDcgKzI4NCw3
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGMKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywg
aHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4g
c3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VV
UkwsIGNoYXJzZXQpOwogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gc3RyaWN0UGFyc2luZzsK
QEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVl
dChjCiAjZW5kaWYKIAogICAgIFN0cmluZyBzaGVldFRleHQgPSBzaGVldC0+c2hlZXRUZXh0KGVu
Zm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUpOwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5n
KHNoZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKHN0cmljdFBhcnNpbmcpKTsKKyAgICBz
dHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldFRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShz
dHJpY3RQYXJzaW5nKSk7CiAKICAgICAvLyBJZiB3ZSdyZSBsb2FkaW5nIGEgc3R5bGVzaGVldCBj
cm9zcy1vcmlnaW4sIGFuZCB0aGUgTUlNRSB0eXBlIGlzIG5vdAogICAgIC8vIHN0YW5kYXJkLCBy
ZXF1aXJlIHRoZSBDU1MgdG8gYXQgbGVhc3Qgc3RhcnQgd2l0aCBhIHN5bnRhY3RpY2FsbHkKQEAg
LTMxNiw4ICszMTYsOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChj
CiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGJhc2VV
UkwpKQogICAgICAgICBjcm9zc09yaWdpbkNTUyA9IHRydWU7CiAKLSAgICBpZiAoY3Jvc3NPcmln
aW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1fc2hlZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlcigpKQotICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRo
aXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIGlmIChjcm9zc09yaWdpbkNTUyAmJiAh
dmFsaWRNSU1FVHlwZSAmJiAhc3R5bGVTaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVh
ZGVyKCkpCisgICAgICAgIHN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0
aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKIAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYm
IG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAgICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzNTA+LgpAQCAtMzI3LDIwICsz
MjcsMjAgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAg
ICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXdsaW5lLgog
ICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4ZXNEb3RD
c3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hl
ZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAgICAgICAgICAgICAgJiYgc2hlZXRUZXh0Lmxl
bmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0Lmxlbmd0aCgpIC0gMSkgewot
ICAgICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPmxlbmd0aCgpID09IDEpOwotICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIG1fc2hlZXQtPmRlbGV0ZVJ1bGUoMCwgZWMp
OworICAgICAgICAgICAgQVNTRVJUKHN0eWxlU2hlZXQtPnJ1bGVDb3VudCgpID09IDEpOworICAg
ICAgICAgICAgc3R5bGVTaGVldC0+Y2xlYXJSdWxlcygpOwogICAgICAgICB9CiAgICAgfQorICAg
IG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CiAKLSAgICBtX3No
ZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKKyAgICBzdHlsZVNoZWV0LT5zZXRUaXRsZSh0aXRsZSgp
KTsKIAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNy
ZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSk7Ci0gICAgbV9zaGVldC0+c2V0
TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CisgICAgc3R5bGVTaGVldC0+c2V0TWVkaWFR
dWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CiAKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBt
X3NoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChzaGVldCk7Ci0gICAgbV9zaGVldC0+Y2hlY2tMb2Fk
ZWQoKTsKKyAgICBzdHlsZVNoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChzaGVldCk7CisgICAgc3R5
bGVTaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBIVE1MTGlua0VsZW1lbnQ6OnN0eWxl
U2hlZXRJc0xvYWRpbmcoKSBjb25zdApAQCAtMzQ5LDcgKzM0OSw3IEBAIGJvb2wgSFRNTExpbmtF
bGVtZW50OjpzdHlsZVNoZWV0SXNMb2FkaW4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KCFtX3NoZWV0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fc2hlZXQtPmlz
TG9hZGluZygpOworICAgIHJldHVybiBtX3NoZWV0LT5pbnRlcm5hbCgpLT5pc0xvYWRpbmcoKTsK
IH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OmxpbmtMb2FkZWQoKQpAQCAtNDQyLDcgKzQ0Miw3
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHIKICAgICAKICAgICAv
LyBXYWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUgbGlua2VkLXRvIHN0eWxlc2hlZXQuCiAgICAg
aWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9jYXN0PEhUTUxMaW5rRWxlbWVu
dCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5hZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+YWRkU3VicmVz
b3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRQZW5k
aW5nU2hlZXQoUGVuZGluZ1NoZWV0VHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3
IEBAIFBhc3NSZWZQdHI8SFRNTFN0eWxlRWxlbWVudD4gSFRNTFN0eWxlRWwKIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQtPnNl
dFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5zZXRU
aXRsZShhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2Fk
QXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpCkBAIC0yNTksNyArMjU5LDcgQEAg
dm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dAogICAgIEhUTUxFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKICAgICBpZiAoQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KHRoaXMpLT5z
aGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxz
KTsKKyAgICAgICAgc3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVS
THModXJscyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3Rh
dGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIAogICAgICAgICAgICAgbWVkaWFM
aXN0ID0gMDsKIAogICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgewotICAgICAgICAgICAg
c291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVldC0+ZmluYWxVUkwoKTsKKyAgICAgICAgICAgIHNv
dXJjZVVSTCA9IHBhcmVudFN0eWxlU2hlZXQtPmludGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAg
ICAgICAgICBpZiAoc291cmNlVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwgPSBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVl
dC0+ZmluZERvY3VtZW50KCkpOwogICAgICAgICB9IGVsc2UKQEAgLTIyNSw4ICsyMjUsOCBAQCBz
dGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogCiAgICAgICAgICAgICAgICAg
ICAgIERvY3VtZW50KiBkb2MgPSBzdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRvYykKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9
IGRvYy0+dXJsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5m
aW5hbFVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9
IHN0eWxlU2hlZXQtPmZpbmFsVVJMKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmludGVybmFsKCktPmZpbmFsVVJM
KCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZVVSTCA9ICIiOwogICAgICAgICAgICAgICAgICAgICBtZWRpYUFycmF5LT5hZGRJdGVtKGJ1
aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlh
TGlzdFNvdXJjZUxpbmtlZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJj
ZVVSTCkpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3Bl
cnR5VGV4dCh1bnMKICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxl
U3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICAgICAgUmVmUHRyPENTU1N0
eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CiAgICAgICAgIENTU1BhcnNlciBwOwotICAgICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11
dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUg
KyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKSk7Cisg
ICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0
eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwg
bV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICAgICAgVmVjdG9y
PENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJjZURhdGEtPnByb3Bl
cnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5z
aXplKCk7CiAKQEAgLTY4OSw4ICs2ODksOCBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+IEluc3BlY3RvCiAvLyBzdGF0aWMKIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogewotICAgIGlmIChwYWdl
U3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCkuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gcGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCk7CisgICAgaWYg
KHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+
ZmluYWxVUkwoKS5zdHJpbmcoKTsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIApAQCAt
NzE4LDggKzcxOCw5IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaW5hbFVSTCgpIGMK
IAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJp
bmcmIHRleHQpCiB7Ci0gICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJSdWxlcygpOwotICAgIG1f
cGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFnZVN0eWxlU2hlZXQtPmNzc1Bh
cnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxl
cygpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCktPnBhcnNlU3RyaW5nKHRleHQs
IG1fcGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCktPmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9w
YWdlU3R5bGVTaGVldC0+Y2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CiAgICAgbV9wYWdl
U3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKICAgICBtX2luc3BlY3RvclN0eWxlcy5j
bGVhcigpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwpAQCAtMTA4NywxNCArMTA4OCwx
NCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhCiAgICAgaWYgKCFt
X3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBuZXdTdHlsZVNoZWV0ID0g
U3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcDsKICAgICBTdHls
ZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CiAgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hl
ZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsK
ICAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFk
b3B0UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKSk7CiAKICAgICBWZWN0b3I8
Q1NTU3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9
IGFzQ1NTUnVsZUxpc3QobmV3U3R5bGVTaGVldC5nZXQoKSk7CisgICAgUmVmUHRyPENTU1J1bGVM
aXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0
eWxlU2hlZXQpLmdldCgpKTsKICAgICBjb2xsZWN0RmxhdFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJh
bmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxlUnVsZSgpKTsKQEAgLTE0MTQsNyArMTQxNSw3
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjoKIAogICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFyYXRpb24gPSBTdHlsZVByb3BlcnR5U2V0Ojpj
cmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcDsKLSAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERl
Y2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0
aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVs
ZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODEsNyArMjgxLDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVT
aAogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVy
bCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNl
dCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCi0gICAg
ICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAg
ICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5j
aGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CiAgICAg
ICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50b1N0cmluZygpOwogICAgICAgICBDU3Ry
aW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0
ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw3ICsxMTgsNyBAQCB2b2lkIFNWR1N0eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0CiAK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0aXRsZUF0dHIpIHsKICAgICAgICAg
aWYgKG1fc2hlZXQpCi0gICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgp
KTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0dHItPnZhbHVl
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0LmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjksMTAgKzY5LDEyIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZU1vZGUgPSBDU1NTdHJpY3RNb2RlKTsKKyAgICBib29sIHBhcnNlU3RyaW5n
KGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VNb2RlID0gQ1NTU3RyaWN0TW9k
ZSk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpOworICAgIHZpcnR1YWwgYm9v
bCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2b2lkIGNoZWNrTG9hZGVkKCk7CisgICAgCisgICAg
Y29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9CiAKICAg
ICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOwogICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3Qg
U3RyaW5nJiBocmVmKTsKQEAgLTgwLDcgKzgyLDcgQEAgcHVibGljOgogICAgIENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgRG9jdW1lbnQqIG93bmVy
RG9jdW1lbnQoKTsKLSAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CisgICAgdmlydHVhbCBYU0xTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wYXJlbnRTdHls
ZVNoZWV0OyB9CiAgICAgdm9pZCBzZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBh
cmVudCk7CiAKICNpZiBVU0UoUVhNTFFVRVJZKQpAQCAtOTUsMTIgKzk3LDI2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7CiAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25z
dCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxl
ZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXREaXNhYmxlZChib29sIGIpIE9WRVJSSURFIHsgbV9pc0Rpc2FibGVkID0gYjsgfQor
ICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9v
d25lck5vZGU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9vcmlnaW5hbFVSTDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT3duZXJOb2RlKCkgT1ZFUlJJREUgeyBtX293bmVyTm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFs
IEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KIAog
cHJpdmF0ZToKICAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBib29sIGVtYmVkZGVkKTsKICNp
ZiAhVVNFKFFYTUxRVUVSWSkKICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVu
dEltcG9ydCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwp
OwogI2VuZGlmCisgICAgCisgICAgTm9kZSogbV9vd25lck5vZGU7CisgICAgU3RyaW5nIG1fb3Jp
Z2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFsVVJMOworICAgIGJvb2wgbV9pc0Rpc2FibGVkOwog
CiAgICAgVmVjdG9yPE93blB0cjxYU0xJbXBvcnRSdWxlPiA+IG1fY2hpbGRyZW47CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw3ICs1NSwxMCBAQCBTT0ZUX0xJ
TksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0UEksCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFyZW50UnVsZSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBT
dHlsZVNoZWV0KHN0YXRpY19jYXN0PE5vZGUqPigwKSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMKQor
ICAgIDogbV9vd25lck5vZGUoMCkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCisg
ICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQorICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQogICAg
ICwgbV9lbWJlZGRlZChmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2VkKGZhbHNlKSAvLyBDaGlsZCBz
aGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hlbiB0aGUgbGlieHNsdCBlbmdpbmUgaGFz
IGZpbmFsbHkgc2VlbiB0aGVtLgogICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCkBAIC02NSw3ICs2
OCwxMCBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1CiB9CiAKIFhT
TFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsICBib29sIGVtYmVkZGVkKQotICAg
IDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwpCisgICAgOiBt
X293bmVyTm9kZShwYXJlbnROb2RlKQorICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkK
KyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCiAg
ICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQogICAgICwgbV9wcm9jZXNzZWQodHJ1ZSkgLy8gVGhl
IHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCiAgICAgLCBtX3N0eWxlc2hlZXREb2Mo
MCkKQEAgLTg1LDcgKzkxLDcgQEAgWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hlZXQoKQogICAg
IH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQorYm9vbCBYU0xTdHlsZVNo
ZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2NoaWxkcmVuLmF0KGkpLT5p
c0xvYWRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCShy
ZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgIGJvb2wgZW1iZWRkZWQp
Ci0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCkKKyAg
ICA6IG1fb3duZXJOb2RlKHBhcmVudE5vZGUpCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFs
VVJMKQorICAgICwgbV9maW5hbFVSTChmaW5hbFVSTCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxz
ZSkKICAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQpCiB7CiB9CkBAIC00Nyw3ICs1MCw3IEBAIFhT
TFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KCkKICAgICB9CiB9CiAKLWJvb2wgWFNMU3R5bGVT
aGVldDo6aXNMb2FkaW5nKCkKK2Jvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkgY29uc3QK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="141550"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136670</attachid>
            <date>2012-04-11 08:12:57 -0700</date>
            <delta_ts>2012-04-11 11:05:54 -0700</delta_ts>
            <desc>try to fix chromium build</desc>
            <filename>stylesheet-internal-19.patch</filename>
            <type>text/plain</type>
            <size>120741</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3Rvcjogc2hvd2luZyBzdW1tYXJ5IHZpZXcgaXMgdmVyeSBzbG93IG9uIGEgc25h
cHNob3Qgd2l0aCB0aG91c2FuZHMgb2YgY29uc3RydWN0b3JzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFpc0xvY2FsKCkpCiAgICAgICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIHN0eWxlU2hlZXQtPmNvbXBsZXRlVVJMKG1fcmVzb3VyY2UpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9t
Q3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVy
bmFsKik7CiAKICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250KERvY3VtZW50Kik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTIgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTdHlsZVJ1
bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorUGFz
c1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKFN0eWxlU2hl
ZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFR
dWVyeVNldD4gbWVkaWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVJbXBv
cnQocGFyZW50LCBocmVmLCBtZWRpYSkpOwogfQogCi1TdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVs
ZUltcG9ydChDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKK1N0eWxlUnVsZUltcG9ydDo6U3R5bGVSdWxlSW1w
b3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NS
ZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKEltcG9ydCwg
MCkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVldChwYXJlbnQpCiAgICAgLCBtX3N0eWxlU2hlZXRD
bGllbnQodGhpcykKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENT
U1N0eWxlU2hlZXQoYwogewogICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVT
aGVldC0+Y2xlYXJPd25lclJ1bGUoKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgbV9zdHlsZVNoZWV0
ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNl
dCk7CiAKICAgICBib29sIGNyb3NzT3JpZ2luQ1NTID0gZmFsc2U7CiAgICAgYm9vbCB2YWxpZE1J
TUVUeXBlID0gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0Ojpz
ZXRDU1NTdHlsZVNoZWV0KGMKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwogCiAgICAg
aWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3N0eWxlU2hlZXQtPmhh
c1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3N0eWxlU2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
ICAgIG1fc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYs
IGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgaWYgKGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJz
ZXJNb2RlKSAmJiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykgewogICAgICAgICAvLyBXb3JrIGFy
b3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzUwPi4KQEAg
LTk4LDkgKzk4LDggQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwog
ICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXds
aW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4
ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0
eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAgICAgICAgICAgICAgJiYgc2hlZXRU
ZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0Lmxlbmd0aCgpIC0g
MSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc3R5bGVTaGVldC0+bGVuZ3RoKCkgPT0gMSk7Ci0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgbV9zdHlsZVNoZWV0LT5k
ZWxldGVSdWxlKDAsIGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0eWxlU2hlZXQtPmNoaWxk
UnVsZXMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBtX3N0eWxlU2hlZXQtPmNsZWFyUnVs
ZXMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM2LDggKzEzNSw4IEBAIHZvaWQgU3R5bGVS
dWxlSW1wb3J0OjpyZXF1ZXN0U3R5bGVTaGVldCgKIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xl
IGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAg
Ly8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwu
Ci0gICAgQ1NTU3R5bGVTaGVldCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OwotICAg
IGZvciAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBz
aGVldCA9IHNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKKyAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIHJvb3RTaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsKKyAgICBmb3IgKFN0eWxlU2hlZXRJ
bnRlcm5hbCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBzaGVldCA9IHNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmcg
aWYgdGhlIGZpbmFsVVJMIHdhcyB1cGRhdGVkIHZpYSBkb2N1bWVudDo6dXBkYXRlQmFzZVVSTC4K
ICAgICAgICAgaWYgKGFic0hyZWYgPT0gc2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNjYsNiArMTY1LDEyIEBAIENTU0ltcG9ydFJ1bGU6OkNTU0lt
cG9ydFJ1bGUoU3R5bGVSdWxlSW0KIHsKIH0KIAorQ1NTSW1wb3J0UnVsZTo6fkNTU0ltcG9ydFJ1
bGUoKQoreworICAgIGlmIChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlci0+Y2xlYXJPd25lclJ1bGUoKTsKK30KKwogTWVkaWFMaXN0KiBD
U1NJbXBvcnRSdWxlOjptZWRpYSgpCiB7CiAgICAgcmV0dXJuIG1faW1wb3J0UnVsZS0+bWVkaWFR
dWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChwYXJlbnRTdHlsZVNoZWV0KCkpOwpAQCAtMTg3LDQg
KzE5MiwxNSBAQCBTdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCitDU1NTdHlsZVNoZWV0KiBDU1NJbXBvcnRSdWxl
OjpzdHlsZVNoZWV0KCkgY29uc3QKK3sgCisgICAgaWYgKCFtX2ltcG9ydFJ1bGUtPnN0eWxlU2hl
ZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fc3R5bGVTaGVldENTU09NV3Jh
cHBlcikKKyAgICAgICAgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyID0gQ1NTU3R5bGVTaGVldDo6
Y3JlYXRlKG1faW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBjb25zdF9jYXN0PENTU0ltcG9ydFJ1
bGUqPih0aGlzKSk7CisgICAgcmV0dXJuIG1fc3R5bGVTaGVldENTU09NV3JhcHBlci5nZXQoKTsg
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIE1lZGlhTGlzdDsKIGNs
YXNzIE1lZGlhUXVlcnlTZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiAKIGNsYXNzIFN0
eWxlUnVsZUltcG9ydCA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJl
bnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoU3R5bGVTaGVldEludGVy
bmFsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0
Pik7CiAKICAgICB+U3R5bGVSdWxlSW1wb3J0KCk7CiAgICAgCi0gICAgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQor
ICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3R5bGVTaGVldDsgfQogICAgIHZvaWQgY2xlYXJQYXJlbnRTdHlsZVNoZWV0KCkg
eyBtX3BhcmVudFN0eWxlU2hlZXQgPSAwOyB9CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RySHJlZjsgfQotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KIAogICAg
IC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTS4KICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwpA
QCAtNzAsMTUgKzcxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgZnJpZW5kIGNsYXNzIEltcG9y
dGVkU3R5bGVTaGVldENsaWVudDsKIAotICAgIFN0eWxlUnVsZUltcG9ydChDU1NTdHlsZVNoZWV0
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CisgICAgU3R5bGVSdWxlSW1wb3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBT
dHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOwogCi0gICAgLy8gRlhJTUU6
IFRoaXMgbmVlZHMgdG8gZ28gYXdheS4KLSAgICBDU1NTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxl
U2hlZXQ7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAKICAg
ICBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQgbV9zdHlsZVNoZWV0Q2xpZW50OwogICAgIFN0cmlu
ZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwot
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CisgICAgUmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gbV9zdHlsZVNoZWV0OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZENTU1N0eWxlU2hlZXQ+IG1fY2FjaGVkU2hlZXQ7CiAgICAgYm9vbCBtX2xvYWRpbmc7CiB9
OwpAQCAtODYsMTAgKzg2LDEyIEBAIHByaXZhdGU6CiBjbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0ltcG9ydFJ1
bGU+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9CisgICAg
CisgICAgfkNTU0ltcG9ydFJ1bGUoKTsKIAogICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRSdWxlLT5ocmVmKCk7IH0KICAgICBNZWRpYUxpc3QqIG1lZGlhKCk7Ci0gICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpOyB9CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0Owog
ICAgIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKQEAgLTk3LDYgKzk5LDggQEAgcHJp
dmF0ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCosIENTU1N0eWxlU2hlZXQq
KTsKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IG1faW1wb3J0UnVsZTsKKworICAgIG11
dGFibGUgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
ZWRpYVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1
bGUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2
LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTgsOCArNTgsOSBAQCB1
bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3QgCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIENTU1BhcnNlciBwKGNzc1BhcnNlck1vZGUoKSk7Ci0gICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwLnBhcnNlUnVsZShwYXJlbnRTdHlsZVNoZWV0KCks
IHJ1bGVTdHJpbmcpOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHls
ZVNoZWV0KCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcihzdHlsZVNoZWV0ID8gc3R5bGVTaGVldC0+
aW50ZXJuYWwoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSk7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwYXJzZXIucGFyc2VSdWxlKHN0eWxlU2hlZXQgPyBz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMCwgcnVsZVN0cmluZyk7CiAgICAgaWYgKCFuZXdSdWxl
KSB7CiAgICAgICAgIC8vIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUg
aGFzIGEgc3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxlLgogICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTEzODUxKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Miw3ICsyNTIsNyBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogCiAg
ICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGlu
ZU51bWJlciwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKK3ZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9
IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldAogICAgIG1fcnVs
ZSA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXJzZVJ1
bGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJuYWwq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0
KTsKICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CkBAIC0yNzksNyAr
Mjc5LDcgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcgogICAgIHJl
dHVybiBtX3J1bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENT
U1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCAqc2hlZXQsIGNvbnN0IFN0
cmluZyAmc3RyaW5nKQorUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OnBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyAmc3Ry
aW5nKQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIHNldHVwUGFyc2VyKCJALXdl
YmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwpAQCAtOTA5LDcgKzkwOSw3IEBA
IHN0YXRpYyBib29sIHBhcnNlS2V5d29yZFZhbHVlKFN0eWxlUHJvcGUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFj
ZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9u
dEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldEludGVybmFs
KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZHVt
bXlTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIGlmICghcGFyc2VWYWx1
ZShkdW1teVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHN0cmluZywgZmFsc2Us
IENTU1F1aXJrc01vZGUsIGNvbnRleHRTdHlsZVNoZWV0KSkKQEAgLTkxNyw3ICs5MTcsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzCiAgICAgcmV0dXJuIHN0YXRp
Y19wb2ludGVyX2Nhc3Q8Q1NTVmFsdWVMaXN0PihkdW1teVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQs
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlv
biwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTkyOSw3ICs5MjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0
aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwog
fQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJh
dGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hl
ZXQoY29udGV4dFN0eWxlU2hlZXQpOwogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImCiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVudCogZG9jLCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCkKIHsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHls
ZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gZHVtbXlTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUo
ZG9jKTsKIAogICAgIHNldFN0eWxlU2hlZXQoZHVtbXlTdHlsZVNoZWV0LmdldCgpKTsKICAgICBt
X3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAmc2VsZWN0b3JMaXN0OwpAQCAtMTAyMiw3
ICsxMDIyLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaQogICAg
IEFTU0VSVChkdW1teVN0eWxlU2hlZXQtPmhhc09uZVJlZigpKTsKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogc3R5bGVTb3VyY2VE
YXRhLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwg
U3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGgg
b2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgcHJlZml4TGVuZ3RoID0gMTU7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCB2b2lkIENTU1BhcnNl
cjo6Y2xlYXJQcm9wZXJ0aWVzKCkKICAgICBtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyA9IGZhbHNl
OwogfQogCi12b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KQordm9pZCBDU1NQYXJzZXI6OnNldFN0eWxlU2hlZXQoU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7CiB9CkBAIC03
MjgzLDcgKzcyODMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKGNvbnN0IFN0
CiAgICAgQVNTRVJUKGRvYyk7CiAgICAgQVNTRVJUKGRvYy0+Y3NzUmVnaW9uc0VuYWJsZWQoKSk7
CiAKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHlsZVNoZWV0ID0gQ1NTU3R5bGVT
aGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gZHVtbXlT
dHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoZG9jKTsKICAgICBzZXRTdHls
ZVNoZWV0KGR1bW15U3R5bGVTaGVldC5nZXQoKSk7CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJr
aXQtZGVjbHN7LXdlYmtpdC1mbG93LWludG86IiwgZmxvd05hbWUsICJ9Iik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgY2xhc3MgQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBDU1NQ
cm9wZXJ0eTsKIGNsYXNzIENTU1NlbGVjdG9yTGlzdDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7CiBj
bGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENTU1dyYXBTaGFwZTsK
QEAgLTYyLDYgKzYxLDcgQEAgY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKIGNsYXNzIFN0
eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZUtleWZy
YW1lOworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIAog
Y2xhc3MgQ1NTUGFyc2VyIHsKQEAgLTcwLDE1ICs3MCwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q1NT
UGFyc2VyKCk7CiAKLSAgICB2b2lkIHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJh
bmdlTWFwID0gMCk7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBDU1NTdHlsZVNo
ZWV0Kik7CisgICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAwKTsK
KyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJu
YWwqLCBjb25zdCBTdHJpbmcmKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0
IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBib29sIHBhcnNlU3lz
dGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBB
dG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShpbnQgaWRl
bnQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJv
cGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiosIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJj
ZURhdGE+KiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgUGFz
c093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgY29uc3Q7CkBAIC0yODYsNyArMjg2LDcgQEAgcHVi
bGljOgogICAgIENTU1BhcnNlck1vZGUgbV9jc3NQYXJzZXJNb2RlOwogICAgIGJvb2wgbV9pbXBv
cnRhbnQ7CiAgICAgQ1NTUHJvcGVydHlJRCBtX2lkOwotICAgIENTU1N0eWxlU2hlZXQqIG1fc3R5
bGVTaGVldDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIG1fc3R5bGVTaGVldDsKICAgICBSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gbV9ydWxlOwogICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tl
eWZyYW1lOwogICAgIE93blB0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsK
ICAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CiAKLSAgICB2b2lkIHNl
dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHls
ZVNoZWV0SW50ZXJuYWwqKTsKIAogICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IG1fY3NzUGFyc2Vy
TW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOyB9CiAgICAgaW5saW5lIGJvb2wgaW5RdWlya3NNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGU7IH0KQEAg
LTM2Myw3ICszNjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZVZhbHVl
KENTU1BhcnNlclZhbHVlKikgY29uc3Q7CiAgICAgYm9vbCBwYXJzZUdlbmVyYXRlZEltYWdlKENT
U1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIAotICAgIGJvb2wgcGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29s
IHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KTsKIAogICAgIGVudW0gU2l6ZVBhcmFtZXRlclR5cGUgewogICAgICAgICBOb25lLApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3Rv
bUNzc1RleHQoCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6
OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAobV9wcmltaXRpdmVVbml0VHlwZSA9
PSBDU1NfVVJJKQogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzdHlsZVNoZWV0LT5j
b21wbGV0ZVVSTChtX3ZhbHVlLnN0cmluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBtX2lzUXVpcmtWYWx1ZTsg
fQogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYs
IGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKICAgICBM
ZW5ndGggdmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCkKK3ZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0
KQogewogICAgIGlmIChtX21hc2spCiAgICAgICAgIG1fbWFzay0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgc3R5bGVTaGVldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RW
YWx1ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogCiBwcml2YXRlOgogICAgIENTU1JlZmxlY3RWYWx1ZShDU1NS
ZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBtYXNrKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVs
ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSwxNSArNjksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlZ2lv
blJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX1JFR0lPTl9SVUxFOyB9CiAg
ICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSU1QT1JUX1JV
TEU7IH0KIAotICAgIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAocGFyZW50UnVsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJ1bGUo
KS0+Y3NzUGFyc2VyTW9kZSgpOwotICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlU2hlZXQoKS0+Y3NzUGFyc2VyTW9kZSgpOwotICAg
ICAgICByZXR1cm4gQ1NTU3RyaWN0TW9kZTsKLSAgICB9Ci0KICAgICB2b2lkIHNldFBhcmVudFN0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKICAgICB7CiAgICAgICAgIG1fcGFy
ZW50SXNSdWxlID0gZmFsc2U7CkBAIC0xMDIsMTMgKzkzLDYgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKLSAgICAgICAgcmV0dXJu
IEtVUkwoKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQq
IHBhcmVudCwgVHlwZSB0eXBlKQogICAgICAgICA6IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGZh
bHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRv
bVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3Iq
ID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAogICAgIHZvaWQgYWRkU3R5bGVSdWxl
KFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKICAgICB2b2lk
IGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1
bGUgPSBmYWxzZSk7CkBAIC0yODUsMTMgKzI4NSwxMyBAQCBzdGF0aWMgUnVsZVNldCogZGVmYXVs
dFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJj
ZVN0eWxlOwotc3RhdGljIENTU1N0eWxlU2hlZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Owot
c3RhdGljIENTU1N0eWxlU2hlZXQqIGRlZmF1bHRTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxl
U2hlZXQqIHF1aXJrc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc3ZnU3R5bGVT
aGVldDsKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBtYXRoTUxTdHlsZVNoZWV0Owotc3RhdGljIENT
U1N0eWxlU2hlZXQqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hl
ZXQqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBkZWZhdWx0
U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHF1aXJrc1N0eWxlU2hlZXQ7
CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBzdmdTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxl
U2hlZXRJbnRlcm5hbCogbWF0aE1MU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJu
YWwqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
ZnVsbHNjcmVlblN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpz
X3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCkBAIC0zOTksNyArMzk5LDcgQEAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3Mh
IFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3duUHRyPFJ1bGVT
ZXQ+IHRlbXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVT
aGVldCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpCisgICAgaWYg
KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNo
ZWV0KCkpCiAgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2Vy
U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNl
clJ1bGVzRnJvbVNoZWV0cyhkb2N1bWVudC0+cGFnZUdyb3VwVXNlclNoZWV0cygpLCAqdGVtcFVz
ZXJTdHlsZSk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0
cyhkb2N1bWVudC0+ZG9jdW1lbnRVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKQEAgLTQx
OCwxNCArNDE4LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0K
ICAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+
dmVjdG9yKCkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+KiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUpCit2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQm
IHVzZXJTdHlsZSkKIHsKICAgICBpZiAoIXVzZXJTaGVldHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+JiBzaGVldCA9IHVzZXJTaGVldHMtPmF0KGkpOworICAgICAgICBjb25zdCBSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiYgc2hlZXQgPSB1c2VyU2hlZXRzLT5hdChpKTsKICAgICAg
ICAgaWYgKHNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAg
IGVsc2UKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RG
ZWF0dXJlcygpCiB9CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotY29uc3QgQ29udGFpbmVy
Tm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVl
dCogc2hlZXQpCitjb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1p
bmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0KQogewogICAgIEFTU0VSVChz
aGVldCk7CiAKQEAgLTUwNCwxNyArNTA0LDE4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
ZW5kQXV0aG9yU3R5bGUKICAgICAgICAgaWYgKCFzdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNo
ZWV0KCkgfHwgc3R5bGVzaGVldHNbaV0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oc3R5bGVzaGVldHNbaV0uZ2V0KCkpOworICAgICAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIHNoZWV0ID0gY3NzU2hlZXQtPmludGVybmFsKCk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1pbmVTY29wZShj
c3NTaGVldCk7CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5l
U2NvcGUoc2hlZXQpOwogICAgICAgICBpZiAoc2NvcGUpIHsKICAgICAgICAgICAgIFNjb3BlZFJ1
bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQo
c2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQog
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNG
cm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9t
ZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQs
ICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICBpZiAoIW1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBl
cnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgY3NzU2hlZXQpOwogICAgIH0KQEAgLTY4
MCwxNCArNjgxLDE0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmNsZWFyKCkK
ICAgICB1c2VzTGlua1J1bGVzID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBw
YXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCitzdGF0aWMgU3R5bGVTaGVldEludGVybmFs
KiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCog
c2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNo
ZWV0IG9uIHB1cnBvc2UKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVl
dEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBv
c2UKICAgICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CiAK
LXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVBU2hlZXQoY29uc3QgY2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVl
dChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQogewogICAgIHJldHVybiBw
YXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKIH0KQEAgLTIyMzcsNyArMjIz
OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TZWxlY3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAgICAgCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxl
c2hlZXRTZWxlY3RvclNjb3BlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
bGFzc1Njb3BlcykKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNl
bGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xh
c3NTY29wZXMpCiB7CiAgICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CiAKQEAg
LTI0NjIsNyArMjQ2Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVS
ZWcKICAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0
b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQu
cmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5
bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5
bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNo
ZWV0KTsKIApAQCAtMjkwMyw3ICsyOTA0LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKEhhc2hNYXAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1h
cCwgRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMo
SGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBI
YXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdyYXBwZXIgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CisgICAgc2hlZXRXcmFwcGVyU2V0LmFk
ZChzdHlsZVNoZWV0V3JhcHBlcik7CisgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1h
cCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NT
T01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdy
YXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNl
dCwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4gPiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLnNpemUoKTsgKytpKSB7
CkBAIC0yOTEyLDIxICsyOTIyLDIxIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KEhhc2hNYXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb2xsZWN0Q1NTT01XcmFw
cGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkp
OwogICAgIH0KLSAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBkb2N1bWVudC0+
cGFnZVVzZXJTaGVldCgpKTsKKyAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBz
aGVldFdyYXBwZXJTZXQsIGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpOwogfQogCiBDU1NTdHls
ZVJ1bGUqIENTU1N0eWxlU2VsZWN0b3I6OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0
b3IoU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlmIChtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLmlzRW1wdHkoKSkgewotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGRlZmF1bHRT
dHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcCwgcXVpcmtzU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIHN2Z1N0eWxlU2hlZXQpOwotICAg
ICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBt
YXRoTUxTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcCwgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOwotICAgICAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBmdWxsc2Ny
ZWVuU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxl
VG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRT
dHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNo
ZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3Jh
cHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKKyAg
ICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwg
bV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0KTsKKyAgICAgICAg
Y29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk7CisgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOwogCi0gICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGRvY3Vt
ZW50KCkpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRvY3VtZW50KCkpOwogICAg
IH0KICAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9u
IDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNzIFN0
eWxlUnVsZVJlZ2lvbjsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsKK2Ns
YXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgU3R5
bGVkRWxlbWVudDsKIGNsYXNzIFdlYktpdENTU0ZpbHRlclZhbHVlOwpAQCAtMTU2LDcgKzE1Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZp
cnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKICAgICAKICAgICAv
LyBGaW5kIHRoZSBpZHMgb3IgY2xhc3NlcyB0aGUgc2VsZWN0b3JzIG9uIGEgc3R5bGVzaGVldCBh
cmUgc2NvcGVkIHRvLiBUaGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgaW4gc3Vi
dHJlZXMgd2hlcmUgdGhlIHJvb3QgZWxlbWVudCBtYXRjaGVzIHRoZSBzY29wZS4KLSAgICBzdGF0
aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoQ1NTU3R5bGVTaGVldCos
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKKyAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNo
ZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpOwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CkBAIC0z
OTksNyArNDAwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUq
IHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKLSAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29s
bGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiA+KiwgUnVsZVNldCYgdXNlclN0eWxlKTsKKyAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29s
bGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwogCiAgICAgdm9pZCBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKIApAQCAtNDk2LDEzICs0OTcsMTQgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBDU1NTdHlsZUFwcGx5UHJvcGVydHkmIG1fYXBwbHlQcm9wZXJ0eTsKICAgICAKICAgICBIYXNo
TWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcDsKKyAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldDsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBib29s
IG1faGFzUGVuZGluZ1NoYWRlcnM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci0gICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IENT
U1N0eWxlU2hlZXQqKTsKKyAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5l
U2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDExMzg1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNzQsOSArNzQsMTEgQEAgc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBh
cgogfQogI2VuZGlmCiAKLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSogcGFyZW50
Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGJhc2VVUkwp
CitTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChOb2RlKiBwYXJlbnROb2Rl
LCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQorICAgIDogbV9vd25lck5vZGUocGFyZW50Tm9kZSkKICAgICAsIG1f
b3duZXJSdWxlKDApCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9m
aW5hbFVSTChmaW5hbFVSTCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2Fk
Q29tcGxldGVkKGZhbHNlKQogICAgICwgbV9jc3NQYXJzZXJNb2RlKENTU1F1aXJrc01vZGUpCkBA
IC04NywyNSArODksMjcgQEAgQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChOb2RlKiBwYXJl
bgogICAgIEFTU0VSVChpc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KHBhcmVudE5vZGUp
KTsKIH0KIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChTdHlsZVJ1bGVJbXBvcnQqIG93
bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCi0gICAgOiBTdHlsZVNoZWV0KGhyZWYsIGJhc2VVUkwpCitTdHlsZVNo
ZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVs
ZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IG1fb3duZXJOb2RlKDApCiAgICAgLCBtX293bmVyUnVs
ZShvd25lclJ1bGUpCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9m
aW5hbFVSTChmaW5hbFVSTCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2Fk
Q29tcGxldGVkKGZhbHNlKQogICAgICwgbV9jc3NQYXJzZXJNb2RlKChvd25lclJ1bGUgJiYgb3du
ZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0
KCktPmNzc1BhcnNlck1vZGUoKSA6IENTU1N0cmljdE1vZGUpCiAgICAgLCBtX2hhc1N5bnRhY3Rp
Y2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxz
ZSkKIHsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IG93bmVyUnVsZSA/IG93bmVy
UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBh
cmVudFNoZWV0ID0gb3duZXJSdWxlID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAw
OwogICAgIG1faXNVc2VyU3R5bGVTaGVldCA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmlz
VXNlclN0eWxlU2hlZXQoKSA6IGZhbHNlOwogfQogCi1DU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVT
aGVldCgpCitTdHlsZVNoZWV0SW50ZXJuYWw6On5TdHlsZVNoZWV0SW50ZXJuYWwoKQogewogICAg
IGNsZWFyUnVsZXMoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJzZXJBcHBlbmRSdWxl
KFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFs
OjpwYXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKIHsKICAg
ICBBU1NFUlQoIXJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSk7CiAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0
UnVsZSgpKSB7CkBAIC0xMTgsMjQgKzEyMiwyNCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnBhcnNl
ckFwcGVuZFJ1bGUoUGFzCiAgICAgbV9jaGlsZFJ1bGVzLmFwcGVuZChydWxlKTsKIH0KIAotUGFz
c1JlZlB0cjxDU1NSdWxlPiBDU1NTdHlsZVNoZWV0OjpjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXIodW5zaWduZWQgaW5kZXgpCitQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlU2hlZXRJbnRlcm5h
bDo6Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4LCBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRXcmFwcGVyKQogewotICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAg
ICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgY2hpbGRW
ZWN0b3JJbmRleCA9IGluZGV4OwogICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7CiAgICAgICAg
IGlmIChpbmRleCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIENTU0NoYXJzZXRSdWxlOjpjcmVh
dGUodGhpcywgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSk7CisgICAgICAgICAgICByZXR1cm4g
Q1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZShwYXJlbnRXcmFwcGVyLCBtX2VuY29kaW5nRnJvbUNoYXJz
ZXRSdWxlKTsKICAgICAgICAgLS1jaGlsZFZlY3RvckluZGV4OwogICAgIH0KICAgICBpZiAoY2hp
bGRWZWN0b3JJbmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9p
bXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOwor
ICAgICAgICByZXR1cm4gbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NT
T01XcmFwcGVyKHBhcmVudFdyYXBwZXIpOwogICAgIAogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0g
bV9pbXBvcnRSdWxlcy5zaXplKCk7Ci0gICAgcmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3Rv
ckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOworICAgIHJldHVybiBtX2NoaWxkUnVs
ZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRXcmFwcGVyKTsK
IH0KIAotdW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFN0
eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUNvdW50KCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCByZXN1
bHQgPSAwOwogICAgIHJlc3VsdCArPSBoYXNDaGFyc2V0UnVsZSgpID8gMSA6IDA7CkBAIC0xNDQs
MzggKzE0OCwxMyBAQCB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjpsZW5ndGgoKSBjb25zdAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUNTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3RoKCk7Ci0gICAgaWYg
KGluZGV4ID49IHJ1bGVDb3VudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5ncm93KHJ1bGVDb3VudCk7Ci0gICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01X
cmFwcGVycy5zaXplKCkgPT0gcnVsZUNvdW50KTsKLQotICAgIFJlZlB0cjxDU1NSdWxlPiYgY3Nz
UnVsZSA9IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF07Ci0gICAgaWYgKCFjc3NSdWxl
KQotICAgICAgICBjc3NSdWxlID0gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKGluZGV4KTsK
LSAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVh
ckNoYXJzZXRSdWxlKCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjpjbGVhckNoYXJzZXRSdWxl
KCkKIHsKICAgICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gU3RyaW5nKCk7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJSdWxlcygpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6
Y2xlYXJSdWxlcygpCiB7Ci0gICAgLy8gRm9yIHN0eWxlIHJ1bGVzIG91dHNpZGUgdGhlIGRvY3Vt
ZW50LCAucGFyZW50U3R5bGVTaGVldCBjYW4gYmVjb21lIG51bGwgZXZlbiBpZiB0aGUgc3R5bGUg
cnVsZQotICAgIC8vIGlzIHN0aWxsIG9ic2VydmFibGUgZnJvbSBKYXZhU2NyaXB0LiBUaGlzIG1h
dGNoZXMgdGhlIGJlaGF2aW9yIG9mIC5wYXJlbnROb2RlIGZvciBub2RlcywgYnV0Ci0gICAgLy8g
aXQncyBub3QgaWRlYWwgYmVjYXVzZSBpdCBtYWtlcyB0aGUgQ1NTT00ncyBiZWhhdmlvciBkZXBl
bmQgb24gdGhlIHRpbWluZyBvZiBnYXJiYWdlIGNvbGxlY3Rpb24uCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQotICAgICAgICAgICAgbV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQYXJlbnRTdHlsZVNoZWV0KDApOwotICAgIH0KLSAg
ICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuY2xlYXIoKTsKLQogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCht
X2ltcG9ydFJ1bGVzLmF0KGkpLT5wYXJlbnRTdHlsZVNoZWV0KCkgPT0gdGhpcyk7CiAgICAgICAg
IG1faW1wb3J0UnVsZXNbaV0tPmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwpAQCAtMTg1LDQ1ICsx
NjQsMTYgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhclJ1bGVzKCkKICAgICBjbGVhckNoYXJz
ZXRSdWxlKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKK3ZvaWQgU3R5bGVTaGVldEludGVy
bmFsOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29k
aW5nKQogewogICAgIC8vIFBhcnNlciBlbmZvcmNlcyB0aGF0IHRoZXJlIGlzIGV2ZXIgb25seSBv
bmUgQGNoYXJzZXQuCiAgICAgQVNTRVJUKG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxs
KCkpOwogICAgIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUgPSBlbmNvZGluZzsgCiB9CiAKLVBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OnJ1bGVzKCkKLXsKLSAgICBLVVJM
IHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZmluZERvY3VtZW50
KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAv
LyBJRSBiZWhhdmlvci4KLSAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG5vbkNoYXJzZXRS
dWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICB1bnNpZ25lZCBydWxlQ291
bnQgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50OyAr
K2kpIHsKLSAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxl
LT5pc0NoYXJzZXRSdWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbm9uQ2hh
cnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vbkNo
YXJzZXRSdWxlcy5yZWxlYXNlKCk7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2Vy
dFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCitib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3JhcHBlckluc2VydFJ1bGUoUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBlYyA9
IDA7Ci0gICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpF
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIENTU1BhcnNlciBwKGNzc1BhcnNl
ck1vZGUoKSk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZSh0
aGlzLCBydWxlU3RyaW5nKTsKLQotICAgIGlmICghcnVsZSkgewotICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoaW5kZXggPD0gcnVs
ZUNvdW50KCkpOwogICAgIC8vIFBhcnNlcjo6cGFyc2VSdWxlIGRvZXNuJ3QgY3VycmVudGx5IGFs
bG93IEBjaGFyc2V0IHNvIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIGl0LgogICAgIEFTU0VS
VCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKICAgICAKQEAgLTIzMiw5OSArMTgyLDU4IEBAIHVu
c2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICBpZiAoaGFzQ2hhcnNl
dFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRleCA9PSAwKSB7CiAgICAgICAg
ICAgICAvLyBOb3RoaW5nIGNhbiBiZSBpbnNlcnRlZCBiZWZvcmUgQGNoYXJzZXQuCi0gICAgICAg
ICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRWZWN0
b3JJbmRleDsKICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9y
dFJ1bGVzLnNpemUoKSB8fCAoY2hpbGRWZWN0b3JJbmRleCA9PSBtX2ltcG9ydFJ1bGVzLnNpemUo
KSAmJiBydWxlLT5pc0ltcG9ydFJ1bGUoKSkpIHsKICAgICAgICAgLy8gSW5zZXJ0aW5nIG5vbi1p
bXBvcnQgcnVsZSBiZWZvcmUgQGltcG9ydCBpcyBub3QgYWxsb3dlZC4KLSAgICAgICAgaWYgKCFy
dWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXJ1
bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBt
X2ltcG9ydFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBzdGF0aWNfY2FzdDxTdHlsZVJ1
bGVJbXBvcnQqPihydWxlLmdldCgpKSk7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0
b3JJbmRleF0tPnJlcXVlc3RTdHlsZVNoZWV0KCk7Ci0gICAgICAgIGdvdG8gc3VjY2VzczsKKyAg
ICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmlu
Z2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCisgICAgICAgIHN0
eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBJ
bnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxlIGlzIG5vdCBhbGxv
d2VkLgotICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICBlYyA9IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChydWxl
LT5pc0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNoaWxkVmVjdG9y
SW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAgCi0gICAgbV9jaGlsZFJ1bGVzLmluc2Vy
dChjaGlsZFZlY3RvckluZGV4LCBydWxlLnJlbGVhc2UoKSk7CisgICAgbV9jaGlsZFJ1bGVzLmlu
c2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKICAgICAKLXN1Y2Nlc3M6Ci0gICAgaWYgKCFt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQotICAgICAgICBtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7Ci0KLSAgICAvLyBG
SVhNRTogU3R5bGVzaGVldCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBtZWFuaW5nZnVsbHkgYmVm
b3JlIHRoZSBpbXBvcnRlZCBzaGVldHMgYXJlIGxvYWRlZC4KICAgICBzdHlsZVNoZWV0Q2hhbmdl
ZCgpOwotICAgIHJldHVybiBpbmRleDsKLX0KLQotaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBz
dHlsZSArICIgfSIsIGluZGV4LCBlYyk7Ci0KLSAgICAvLyBBcyBwZXIgTWljcm9zb2Z0IGRvY3Vt
ZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCi0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgQ1NT
U3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBjb25zdCBTdHJpbmcm
IHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gYWRkUnVsZShzZWxlY3Rv
ciwgc3R5bGUsIGxlbmd0aCgpLCBlYyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKCkKK3ZvaWQgU3R5bGVTaGVl
dEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBLVVJM
IHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZmluZERvY3VtZW50
KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0KHRoaXMpKTsKLSAgICByZXR1
cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKLX0KKyAgICBBU1NFUlQoaW5kZXggPCBy
dWxlQ291bnQoKSk7CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7
Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgZWMgPSAwOwogICAgIHVuc2lnbmVkIGNoaWxkVmVjdG9ySW5kZXggPSBpbmRleDsK
ICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRl
eCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAgICAgICAgICBn
b3RvIHN1Y2Nlc3M7CisgICAgICAgICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKICAgICB9
CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1bGVzLnNpemUoKSkgewogICAg
ICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jbGVhclBhcmVudFN0eWxlU2hl
ZXQoKTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7Ci0g
ICAgICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKLQot
c3VjY2VzczoKLSAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVT
aGVldCgwKTsKLSAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7
Ci0gICAgfQotCiAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNo
ZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6YWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICh1cmkuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzNyw3ICsyNDYsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFkZE5hbWVzcGFj
ZShDU1NQYXJzCiAgICAgICAgIHAtPm1fZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBDU1NTdHlsZVNoZWV0OjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgpCitjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRJbnRl
cm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewog
ICAgIGlmIChwcmVmaXguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxsQXRvbTsgLy8gTm8g
bmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdv
bid0IG1hdGNoIGl0LgpAQCAtMzUwLDEyICsyNTksMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBD
U1NTdHlsZVNoZWV0OjpkZXRlcgogICAgIHJldHVybiBudWxsQXRvbTsgLy8gQXNzdW1lIHdlIHdv
bid0IG1hdGNoIGFueSBuYW1lc3BhY2VzLgogfQogCi1ib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
Citib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nICZzdHJp
bmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICByZXR1cm4gcGFyc2VTdHJp
bmdBdExpbmUoc3RyaW5nLCBjc3NQYXJzZXJNb2RlLCAwKTsKIH0KIAotYm9vbCBDU1NTdHlsZVNo
ZWV0OjpwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKQorYm9vbCBTdHlsZVNoZWV0SW50
ZXJuYWw6OnBhcnNlU3RyaW5nQXRMaW5lKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIGludCBzdGFydExpbmVOdW1iZXIpCiB7CiAgICAgc2V0Q1NTUGFy
c2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKICAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKTsK
QEAgLTM2Myw3ICsyNzIsNyBAQCBib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nQXRMaW5l
KGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5n
KCkKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjppc0xvYWRpbmcoKSBjb25zdAogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChtX2ltcG9ydFJ1bGVzW2ldLT5pc0xvYWRpbmcoKSkKQEAgLTM3Miw3ICsyODEsNyBA
QCBib29sIENTU1N0eWxlU2hlZXQ6OmlzTG9hZGluZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIENTU1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKK3ZvaWQgU3R5bGVTaGVldEludGVy
bmFsOjpjaGVja0xvYWRlZCgpCiB7CiAgICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1
cm47CkBAIC0zODAsOCArMjg5LDggQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgp
CiAgICAgLy8gQXZvaWQgfHRoaXN8IGJlaW5nIGRlbGV0ZWQgYnkgc2NyaXB0cyB0aGF0IHJ1biB2
aWEKICAgICAvLyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzKCkuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82NjIyMzAwPi4K
LSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcHJvdGVjdG9yKHRoaXMpOwotICAgIGlmIChDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQorICAgIFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBpZiAoU3R5bGVTaGVldElu
dGVybmFsKiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQogICAgICAgICBzdHlsZVNo
ZWV0LT5jaGVja0xvYWRlZCgpOwogCiAgICAgUmVmUHRyPE5vZGU+IG93bmVyID0gb3duZXJOb2Rl
KCk7CkBAIC0zOTQsNTAgKzMwMyw0MyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVk
KCkKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6bm90aWZ5TG9hZGVkU2hlZXQoY29u
c3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6
bm90aWZ5TG9hZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCiB7CiAg
ICAgQVNTRVJUKHNoZWV0KTsKICAgICBtX2RpZExvYWRFcnJvck9jY3VyIHw9IHNoZWV0LT5lcnJv
ck9jY3VycmVkKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3RhcnRMb2FkaW5nRHluYW1p
Y1NoZWV0KCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQoKQogewogICAgIGlmIChOb2RlKiBvd25lciA9IG93bmVyTm9kZSgpKQogICAgICAgICBvd25l
ci0+c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9CiAKLU5vZGUqIENTU1N0eWxlU2hlZXQ6
OmZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCkgY29uc3QKK05vZGUqIFN0eWxlU2hlZXRJbnRlcm5h
bDo6ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQ1NT
U3R5bGVTaGVldCogc2hlZXQgPSB0aGlzOyBzaGVldDsgc2hlZXQgPSBzaGVldC0+cGFyZW50U3R5
bGVTaGVldCgpKSB7CisgICAgZm9yIChjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0g
dGhpczsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAg
ICBpZiAoTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuIG93bmVyTm9kZTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLURvY3VtZW50KiBD
U1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1lbnQoKQorRG9jdW1lbnQqIFN0eWxlU2hlZXRJbnRlcm5h
bDo6ZmluZERvY3VtZW50KCkKIHsKICAgICBOb2RlKiBvd25lck5vZGUgPSBmaW5kU3R5bGVTaGVl
dE93bmVyTm9kZSgpOwogCiAgICAgcmV0dXJuIG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1l
bnQoKSA6IDA7CiB9Ci0gICAgCi1NZWRpYUxpc3QqIENTU1N0eWxlU2hlZXQ6Om1lZGlhKCkgY29u
c3QgCi17IAotICAgIGlmICghbV9tZWRpYVF1ZXJpZXMpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBtX21lZGlhUXVlcmllcy0+ZW5zdXJlTWVkaWFMaXN0KGNvbnN0X2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KHRoaXMpKTsKLX0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXRNZWRpYVF1ZXJp
ZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCit2b2lkIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6c2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWFRdWVyaWVzKQogewogICAgIG1fbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzOwogfQogCi12
b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKK3ZvaWQgU3R5bGVTaGVldElu
dGVybmFsOjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCogcm9vdFNo
ZWV0ID0gdGhpczsKLSAgICB3aGlsZSAoQ1NTU3R5bGVTaGVldCogcGFyZW50ID0gcm9vdFNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgU3R5bGVTaGVldEludGVybmFsKiByb290U2hlZXQg
PSB0aGlzOworICAgIHdoaWxlIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCA9IHJvb3RTaGVl
dC0+cGFyZW50U3R5bGVTaGVldCgpKQogICAgICAgICByb290U2hlZXQgPSBwYXJlbnQ7CiAKICAg
ICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBldmVyeXRoaW5nIHVwZGF0ZVN0eWxlU2Vs
ZWN0b3IgZG9lcywKQEAgLTQ0Nyw4ICszNDksMTkgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0Q2hhbmdlZCgpCiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudFRvVXBkYXRlID0gcm9v
dFNoZWV0LT5maW5kRG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnRUb1VwZGF0ZS0+c3R5bGVT
ZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CisgICAgCitLVVJMIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbmFsVVJMLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gbV9maW5hbFVSTDsKKyAgICBpZiAoU3R5bGVTaGVldEludGVy
bmFsKiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIHBh
cmVudFNoZWV0LT5iYXNlVVJMKCk7CisgICAgaWYgKCFtX293bmVyTm9kZSkKKyAgICAgICAgcmV0
dXJuIEtVUkwoKTsKKyAgICByZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCktPmJhc2VVUkwo
KTsKK30KIAotS1VSTCBDU1NTdHlsZVNoZWV0Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVy
bCkgY29uc3QKK0tVUkwgU3R5bGVTaGVldEludGVybmFsOjpjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwgd2hlbiBw
YXNzZWQgYSBudWxsIHN0cmluZy4KICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5nZSB0aGUg
S1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CkBAIC00NjEsMTMgKzM3NCwx
MyBAQCBLVVJMIENTU1N0eWxlU2hlZXQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0CiAgICAgcmV0dXJu
IEtVUkwoYmFzZVVSTCgpLCB1cmwsIGVuY29kaW5nKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0
OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKK3ZvaWQg
U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykKIHsKLSAgICBEZXF1ZTxDU1NTdHlsZVNoZWV0Kj4gc3R5bGVTaGVldFF1ZXVl
OworICAgIERlcXVlPFN0eWxlU2hlZXRJbnRlcm5hbCo+IHN0eWxlU2hlZXRRdWV1ZTsKICAgICBz
dHlsZVNoZWV0UXVldWUuYXBwZW5kKHRoaXMpOwogCiAgICAgd2hpbGUgKCFzdHlsZVNoZWV0UXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0UXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5
bGVTaGVldCA9IHN0eWxlU2hlZXRRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5tX2ltcG9ydFJ1bGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBzdHls
ZVNoZWV0LT5tX2ltcG9ydFJ1bGVzW2ldLmdldCgpOwpAQCAtNDg2LDI1ICszOTksMTU5IEBAIHZv
aWQgQ1NTU3R5bGVTaGVldDo6YWRkU3VicmVzb3VyY2VTdHlsZVUKICAgICB9CiB9CiAKLUNTU0lt
cG9ydFJ1bGUqIENTU1N0eWxlU2hlZXQ6OmVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJbXBv
cnQqIGltcG9ydFJ1bGUpCitTdHlsZVNoZWV0SW50ZXJuYWwqIFN0eWxlU2hlZXRJbnRlcm5hbDo6
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CiB7Ci0gICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICBpZiAobV9pbXBvcnRSdWxl
c1tpXSA9PSBpbXBvcnRSdWxlKQotICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbShpKSk7Ci0gICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpIDogMDsKIH0KIAotQ1NTSW1wb3J0UnVsZSogQ1NTU3R5bGVTaGVldDo6
b3duZXJSdWxlKCkgY29uc3QgCi17ICAKLSAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpID8g
cGFyZW50U3R5bGVTaGVldCgpLT5lbnN1cmVDU1NPTVdyYXBwZXIobV9vd25lclJ1bGUpIDogMDsg
CitDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiBzdHlsZVNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpCisgICAgOiBtX2ludGVy
bmFsKHN0eWxlU2hlZXQpCisgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX293bmVy
UnVsZShvd25lclJ1bGUpCit7CiB9CiAKLUNTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdAorQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQog
ewotICAgIEFTU0VSVChpc0NTU1N0eWxlU2hlZXQoKSk7Ci0gICAgcmV0dXJuIG1fb3duZXJSdWxl
ID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CisgICAgLy8gRm9yIHN0eWxl
IHJ1bGVzIG91dHNpZGUgdGhlIGRvY3VtZW50LCAucGFyZW50U3R5bGVTaGVldCBjYW4gYmVjb21l
IG51bGwgZXZlbiBpZiB0aGUgc3R5bGUgcnVsZQorICAgIC8vIGlzIHN0aWxsIG9ic2VydmFibGUg
ZnJvbSBKYXZhU2NyaXB0LiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIC5wYXJlbnROb2Rl
IGZvciBub2RlcywgYnV0CisgICAgLy8gaXQncyBub3QgaWRlYWwgYmVjYXVzZSBpdCBtYWtlcyB0
aGUgQ1NTT00ncyBiZWhhdmlvciBkZXBlbmQgb24gdGhlIHRpbWluZyBvZiBnYXJiYWdlIGNvbGxl
Y3Rpb24uCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
W2ldKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQYXJlbnRT
dHlsZVNoZWV0KDApOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxl
ZChib29sIGRpc2FibGVkKQoreyAKKyAgICBpZiAoZGlzYWJsZWQgPT0gbV9pc0Rpc2FibGVkKQor
ICAgICAgICByZXR1cm47CisgICAgbV9pc0Rpc2FibGVkID0gZGlzYWJsZWQ7IAorICAgIG1faW50
ZXJuYWwtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7Cit9CisKK3Vuc2lnbmVkIENTU1N0eWxlU2hlZXQ6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnJ1bGVDb3VudCgpOwor
fQorCitDU1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAg
IHVuc2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOworICAgIGlmIChpbmRleCA+PSBydWxlQ291
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5ncm93KHJ1bGVD
b3VudCk7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gcnVs
ZUNvdW50KTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnNbaW5kZXhdOworICAgIGlmICghY3NzUnVsZSkKKyAgICAgICAgY3NzUnVs
ZSA9IG1faW50ZXJuYWwtPmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcihpbmRleCwgdGhpcyk7
CisgICAgcmV0dXJuIGNzc1J1bGUuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IENTU1N0eWxlU2hlZXQ6OnJ1bGVzKCkKK3sKKyAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZp
bmFsVVJMKCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9pbnRlcm5hbC0+ZmluZERvY3Vt
ZW50KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAvLyBJRSBiZWhhdmlvci4KKyAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG5vbkNoYXJz
ZXRSdWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICB1bnNpZ25lZCBydWxl
Q291bnQgPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50
OyArK2kpIHsKKyAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChy
dWxlLT5pc0NoYXJzZXRSdWxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9u
Q2hhcnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsKKyAgICB9CisgICAgcmV0dXJuIG5v
bkNoYXJzZXRSdWxlcy5yZWxlYXNlKCk7Cit9CisKK3Vuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omlu
c2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0Vt
cHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2ludGVybmFsLT5y
dWxlQ291bnQoKSk7CisKKyAgICBlYyA9IDA7CisgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpIHsK
KyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIENTU1BhcnNlciBwKG1faW50ZXJuYWwtPmNzc1BhcnNlck1vZGUoKSk7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZShtX2ludGVybmFsLmdldCgpLCBydWxl
U3RyaW5nKTsKKworICAgIGlmICghcnVsZSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBib29sIHN1Y2Nlc3MgPSBtX2ludGVybmFsLT53
cmFwcGVySW5zZXJ0UnVsZShydWxlLCBpbmRleCk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAg
ICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
ICAgICAgICAKKyAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCisg
ICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NS
dWxlPigpKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVs
ZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJU
KG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLnNpemUoKSA9PSBtX2ludGVybmFsLT5ydWxlQ291bnQoKSk7CisKKyAgICBlYyA9IDA7
CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0
ZVJ1bGUoaW5kZXgpOworCisgICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVu
dFN0eWxlU2hlZXQoMCk7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUo
aW5kZXgpOworICAgIH0KK30KKworaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIg
fSIsIGluZGV4LCBlYyk7CisgICAgCisgICAgLy8gQXMgcGVyIE1pY3Jvc29mdCBkb2N1bWVudGF0
aW9uLCBhbHdheXMgcmV0dXJuIC0xLgorICAgIHJldHVybiAtMTsKK30KKworaW50IENTU1N0eWxl
U2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHls
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGFkZFJ1bGUoc2VsZWN0b3IsIHN0
eWxlLCBsZW5ndGgoKSwgZWMpOworfQorCisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0
eWxlU2hlZXQ6OmNzc1J1bGVzKCkKK3sKKyAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZpbmFs
VVJMKCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9pbnRlcm5hbC0+ZmluZERvY3VtZW50
KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0KHRoaXMpKTsKKyAgICByZXR1
cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKK30KKworTWVkaWFMaXN0KiBDU1NTdHls
ZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoreyAKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1lZGlhUXVl
cmllcygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bWVkaWFR
dWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlz
KSk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCAKK3sgCisgICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKSA6IDA7IAorfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRS
dWxlQ1NTT01XcmFwcGVycygpCit7CisgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmNsZWFy
KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNiArMzEsNyBAQCBj
bGFzcyBDU1NJbXBvcnRSdWxlOwogY2xhc3MgQ1NTUGFyc2VyOwogY2xhc3MgQ1NTUnVsZTsKIGNs
YXNzIENTU1J1bGVMaXN0OworY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIERvY3VtZW50OwpA
QCAtNDEsNTMgKzQyLDQxIEBAIHN0cnVjdCBDU1NOYW1lc3BhY2U7CiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7
CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0
SW50ZXJuYWw+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3Jl
YXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPigwKSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5n
KCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4oMCksIFN0cmluZygpLCBLVVJMKCksIFN0cmluZygp
KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShO
b2RlKiBvd25lck5vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiBjcmVhdGUoTm9kZSogb3duZXJOb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NTdHlsZVNoZWV0KG93bmVyTm9kZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJO
b2RlLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJpbmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKE5v
ZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmlu
YWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwg
Y2hhcnNldCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hlZXRJbnRlcm5h
bChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkpOwogICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0
KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFs
VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQo
b3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJSdWxlLCBvcmlnaW5hbFVS
TCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gY3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmlu
YWxVUkwpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGVJ
bmxpbmUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIGZpbmFsVVJM
LnN0cmluZygpLCBmaW5hbFVSTCwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJOb2RlLCBmaW5hbFVSTC5zdHJpbmcoKSwgZmlu
YWxVUkwsIFN0cmluZygpKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q1NTU3R5bGVTaGVldCgp
OwotCi0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Qg
T1ZFUlJJREU7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwotICAg
IHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSUUgRXh0ZW5zaW9ucwotICAgIFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHJ1bGVzKCk7Ci0gICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
aW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgflN0eWxlU2hl
ZXRJbnRlcm5hbCgpOwogCiAgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKTsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCk7CiAKICAgICB2b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1v
ZGUpOworICAgIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9
IENTU1N0cmljdE1vZGUpOwogCiAgICAgYm9vbCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJp
bmcmLCBDU1NQYXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBpc0xvYWRpbmcoKTsKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwogCiAgICAgdm9p
ZCBjaGVja0xvYWRlZCgpOwogICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CkBA
IC0xMTUsMzggKzEwNCw1MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyUnVsZXMoKTsKIAot
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQg
aW5kZXgpOwotCiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hhcnNldCBhbmQgQGltcG9ydC4K
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkUnVsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1
bGVzOyB9CiAKLSAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsK
LQogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxN
ZWRpYVF1ZXJ5U2V0Pik7CiAKICAgICB2b2lkIG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hl
ZENTU1N0eWxlU2hlZXQqKTsKICAgICAKLSAgICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVy
UnVsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0OworICAgIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJOb2RlOyB9CisgICAgdm9pZCBjbGVhck93bmVyTm9kZSgpIHsgbV9vd25lck5vZGUgPSAw
OyB9CisgICAgU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiBtX293
bmVyUnVsZTsgfQogICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsg
fQogICAgIAotICAgIENTU0ltcG9ydFJ1bGUqIGVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJ
bXBvcnQqKTsKKyAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRlZCB0
aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KKyAgICAvLyB0aGlzIHN0eWxlIHNoZWV0LiBU
aGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKKyAgICAv
LyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1ZSBm
b3Igc2VjdXJpdHkpLgorICAgIFN0cmluZyBvcmlnaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luYWxVUkw7IH0KKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxl
OyB9CisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0
aXRsZTsgfQorICAgIAorICAgIHZvaWQgc2V0RmluYWxVUkwoY29uc3QgS1VSTCYgZmluYWxVUkwp
IHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9CisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBj
b25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9CisgICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7CiAK
LXByaXZhdGU6Ci0gICAgQ1NTU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpOwotICAgIENTU1N0eWxlU2hlZXQoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0
IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpOworICAgIHVuc2lnbmVkIHJ1bGVDb3VudCgpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQg
aW5kZXgpOworICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0g
ICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQor
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2ln
bmVkIGluZGV4LCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRXcmFwcGVyKTsKKworcHJpdmF0ZToKKyAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQpOwogICAgIAogICAgIHZvaWQgY2xlYXJDaGFyc2V0UnVsZSgpOwogICAgIGJvb2wgaGFz
Q2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVybiAhbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5p
c051bGwoKTsgfQogCi0gICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBjcmVhdGVDaGlsZFJ1bGVDU1NP
TVdyYXBwZXIodW5zaWduZWQgaW5kZXgpOwotCisgICAgTm9kZSogbV9vd25lck5vZGU7CiAgICAg
U3R5bGVSdWxlSW1wb3J0KiBtX293bmVyUnVsZTsKKworICAgIFN0cmluZyBtX29yaWdpbmFsVVJM
OworICAgIEtVUkwgbV9maW5hbFVSTDsKKyAgICBTdHJpbmcgbV90aXRsZTsKKwogICAgIFN0cmlu
ZyBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
SW1wb3J0PiA+IG1faW1wb3J0UnVsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+IG1fY2hpbGRSdWxlczsKQEAgLTE1OSw3ICsxNjMsNjIgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNVc2VyU3R5bGVTaGVldCA6IDE7CiAgICAgYm9vbCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlciA6IDE7CiAgICAgYm9vbCBtX2RpZExvYWRFcnJvck9jY3VyIDogMTsKK307CisK
K2NsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IHNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUgPSAwKSAKKyAgICB7IAor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyUnVs
ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNTU1N0eWxlU2hlZXQoKTsKKworICAgIHZpcnR1
YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRl
cm5hbC0+b3duZXJOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9pbnRlcm5hbC0+b3JpZ2luYWxVUkwoKTsgfSAgCisgICAgdmlydHVhbCBTdHJpbmcg
dGl0bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT50aXRsZSgpOyB9Cisg
ICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0Rp
c2FibGVkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wpIE9WRVJSSURFOwor
ICAgIAorICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVzKCk7CisgICAgdW5zaWdu
ZWQgaW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CisgICAgCisgICAgLy8gSUUgRXh0ZW5zaW9ucworICAgIFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IHJ1bGVzKCk7CisgICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
Y29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50
IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgCisgICAgLy8gRm9y
IENTU1J1bGVMaXN0LgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIENTU1J1bGUq
IGl0ZW0odW5zaWduZWQgaW5kZXgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2Rl
KCkgT1ZFUlJJREUgeyBtX2ludGVybmFsLT5jbGVhck93bmVyTm9kZSgpOyB9CisgICAgdmlydHVh
bCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293
bmVyUnVsZTsgfQorICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9pbnRlcm5hbC0+YmFzZVVSTCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGlu
ZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmlzTG9hZGluZygpOyB9Cisg
ICAgCisgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CisgICAg
dm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQo
KTsgfQorICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSB7IHJldHVybiBtX2ludGVybmFsLT5m
aW5kRG9jdW1lbnQoKTsgfQorICAgIAorICAgIHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzKCk7CisKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1
cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENTU1N0eWxlU2hlZXQoUGFz
c1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpOwor
CisgICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsg
fQorICAgIAorICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1faW50ZXJuYWw7CisgICAg
Ym9vbCBtX2lzRGlzYWJsZWQ7CiAKKyAgICBDU1NJbXBvcnRSdWxlKiBtX293bmVyUnVsZTsKICAg
ICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiBtX2NoaWxkUnVsZUNTU09NV3JhcHBl
cnM7CiAgICAgbXV0YWJsZSBPd25QdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIENTU1ZhbHVlOjpUeXBlIENTU1ZhbHVlOjpjc3NWYWx1ZVR5cGUoKSAKICAgICBy
ZXR1cm4gQ1NTX0NVU1RPTTsKIH0KIAotdm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCit2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewog
ICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5
LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAko
cmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBDU1NTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogICAgIAogLy8gRklY
TUU6IFRoZSBjdXJyZW50IENTU1ZhbHVlIGFuZCBzdWJjbGFzc2VzIHNob3VsZCBiZSB0dXJuZWQg
aW50byBpbnRlcm5hbCB0eXBlcyAoU3R5bGVWYWx1ZSkuCiAvLyBUaGUgZmV3IHN1YnR5cGVzIHRo
YXQgYXJlIGFjdHVhbGx5IGV4cG9zZWQgaW4gQ1NTT00gY2FuIGJlIHNlZW4gaW4gdGhlIGNsb25l
Rm9yQ1NTT00oKSBmdW5jdGlvbi4KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBjbG9uZUZvckNTU09NKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVT
aGVldCopOworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogcHJvdGVjdGVkOgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsx
MzYsNyBAQCBTdHJpbmcgQ1NTVmFsdWVMaXN0OjpjdXN0b21Dc3NUZXh0KCkgY29uCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVz
b3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5
bGVTaGVldCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVM
aXN0LmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lk
IGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVT
aGVldEludGVybmFsKik7CiAgICAgCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNsb25l
Rm9yQ1NTT00oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAJ
KHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTVmFsdWVQbwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitQYXNz
UmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNv
bnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KQogewogICAgIC8vIEp1c3Qgd2lwZSBvdXQgdGhlIGNhY2hlIGFuZCBzdGFydCByZWJ1
aWxkaW5nIGlmIGl0IGdldHMgdG9vIGJpZy4KICAgICBjb25zdCBpbnQgbWF4aW11bUZvbnRGYWNl
Q2FjaGVTaXplID0gMTI4OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMCArMzYsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q1NTVmFsdWVMaXN0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogCiBjbGFzcyBDU1NWYWx1
ZVBvb2wgewogcHVibGljOgotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjcmVhdGVGb250
RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHls
ZVNoZWV0KTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZhY2VWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNo
ZWV0KTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVGb250RmFtaWx5
VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxDU1NJbmhlcml0ZWRWYWx1ZT4g
Y3JlYXRlSW5oZXJpdGVkVmFsdWUoKSB7IHJldHVybiBtX2luaGVyaXRlZFZhbHVlOyB9CiAgICAg
UGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkg
eyByZXR1cm4gbV9pbXBsaWNpdEluaXRpYWxWYWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlz
aW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldAogI2VuZGlmCiAgICAgZWMgPSAwOwogICAg
IC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIG1fcHJvcGVy
dHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisgICAg
bV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgp
LT5pbnRlcm5hbCgpKTsKIAogICAgIGRpZE11dGF0ZSgpOwogI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnNldAogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlv
cml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CiAgICAgZWMgPSAw
OwotICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOworICAgIGJvb2wgY2hh
bmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBv
cnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCktPmludGVybmFsKCkpOwogICAgIGlmIChjaGFuZ2Vk
KSB7CiAgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBh
cnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5
LAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyOTY+LgpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXQKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKICNlbmRpZgogICAgIGVjID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3Bl
cnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0
U3R5bGVTaGVldCgpKTsKKyAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpLT5p
bnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICBkaWRNdXRhdGUoKTsKICNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTEzODUx
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTU3R5bGVTaGVldDsK
IGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlU2hl
ZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxp
Y2kKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7
CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVT
aGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAg
Ly8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUg
cHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBudWxs
IHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBp
dCBqdXN0IHRoZSBzYW1lLgpAQCAtNTMxLDcgKzUzMSw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoQ1NTUHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlv
biwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit2b2lkIFN0eWxlUHJvcGVydHlT
ZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHls
ZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1fcHJvcGVydGllcy5j
bGVhcigpOwogICAgIENTU1BhcnNlciBwYXJzZXIoY3NzUGFyc2VyTW9kZSgpKTsKQEAgLTc5Myw3
ICs3OTMsNyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAg
fQogfQogCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkK
K3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mIHVybHMsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIEtVUkw7CiBj
bGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50
OwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5h
bDsKIAogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJv
cGVydHlTZXQ+IHsKIHB1YmxpYzoKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNQcm9wZXJ0eUltcGxpY2l0KENTU1Byb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgLy8gVGhlc2Ug
ZXhwYW5kIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGludG8gbXVsdGlwbGUgcHJvcGVydGllcy4KLSAg
ICBib29sIHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50ID0gZmFsc2UsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0g
MCk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRT
dHlsZVNoZWV0ID0gMCk7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVz
ZSBkbyBub3QuIEZJWE1FOiBUaGlzIGlzIHRvbyBtZXNzeSwgd2UgY2FuIGRvIGJldHRlci4KQEAg
LTc3LDcgKzc4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7CiAKLSAgICB2b2lkIHBhcnNlRGVj
bGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBj
b250ZXh0U3R5bGVTaGVldCk7CisgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmlu
ZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVl
dCk7CiAKICAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqLCBp
bnQgbnVtUHJvcGVydGllcyk7CiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQ
cm9wZXJ0eSYpOwpAQCAtOTEsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDU1NQYXJz
ZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkgeyBtX2Nzc1BhcnNlck1vZGUgPSBj
c3NQYXJzZXJNb2RlOyB9CiAgICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyTW9kZT4obV9jc3NQYXJzZXJNb2RlKTsgfQog
Ci0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCk7CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBj
b25zdDsKICAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9w
ZXJ0aWVzKCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM4
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDQ5ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXQuaCIKIAotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVTaGVldDo6U3R5bGVTaGVldChOb2RlKiBwYXJlbnRO
b2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAg
ICA6IG1fZGlzYWJsZWQoZmFsc2UpCi0gICAgLCBtX293bmVyTm9kZShwYXJlbnROb2RlKQotICAg
ICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwp
Ci17Ci19Ci0KLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVS
TCwgY29uc3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwg
bV9vd25lck5vZGUoMCkKLSAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBt
X2ZpbmFsVVJMKGZpbmFsVVJMKQotewotfQotCiBTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCiB7
CiB9CiAKLUtVUkwgU3R5bGVTaGVldDo6YmFzZVVSTCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Zp
bmFsVVJMLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9maW5hbFVSTDsKLSAgICBpZiAoU3R5
bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVy
biBwYXJlbnRTaGVldC0+YmFzZVVSTCgpOwotICAgIGlmICghbV9vd25lck5vZGUpCi0gICAgICAg
IHJldHVybiBLVVJMKCk7Ci0gICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCk7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkK
LXsKLSAgICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOwotICAgICBpZiAoaXNDU1NTdHlsZVNoZWV0
KCkpCi0gICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4odGhpcyktPnN0eWxlU2hl
ZXRDaGFuZ2VkKCk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzksNDggKzM5LDIxIEBAIGNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTdHkKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7CiAKLSAgICBib29sIGRp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJs
ZWQoYm9vbCk7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX293bmVy
Tm9kZTsgfQotICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJOb2RlID0gMDsgfQot
Ci0gICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldERpc2FibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9k
ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJM
IHRoYXQgc3RhcnRlZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KLSAgICAvLyB0aGlz
IHN0eWxlIHNoZWV0LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVj
aCBleGNlcHQKLSAgICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1
c2UgdGhpcyB2YWx1ZSBmb3Igc2VjdXJpdHkpLgotICAgIGNvbnN0IFN0cmluZyYgaHJlZigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KLQotICAgIHZvaWQgc2V0RmluYWxVUkwoY29u
c3QgS1VSTCYgZmluYWxVUkwpIHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9Ci0gICAgY29uc3Qg
S1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9Ci0KLSAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJUaXRsZTsgfQotICAgIHZvaWQg
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiBzKSB7IG1fc3RyVGl0bGUgPSBzOyB9CisgICAgdmlydHVh
bCBTdHJpbmcgaHJlZigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBpc0xvYWRpbmcoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpID0gMDsKIAorICAgIHZp
cnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbGVhck93bmVyTm9kZSgpID0gMDsKKyAgICB2aXJ0dWFsIEtVUkwgYmFz
ZVVSTCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBT
dHlsZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCk7Ci0gICAgU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtV
UkwmIGZpbmFsVVJMKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fZGlzYWJsZWQ7Ci0gICAgTm9k
ZSogbV9vd25lck5vZGU7Ci0gICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7Ci0gICAgS1VSTCBtX2Zp
bmFsVVJMOwotICAgIFN0cmluZyBtX3N0clRpdGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJl
dmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDggKzEwOSw5IEBAIHZvaWQgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6aW5zZXJ0UnVsZSgKIHsKICAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLnNpemUoKSA9PSBtX2tleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpLnNpemUoKSk7
CiAKLSAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKCkpOwotICAgIFJlZlB0cjxTdHlsZUtl
eWZyYW1lPiBrZXlmcmFtZSA9IHAucGFyc2VLZXlmcmFtZVJ1bGUocGFyZW50U3R5bGVTaGVldCgp
LCBydWxlVGV4dCk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxl
U2hlZXQoKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5p
bnRlcm5hbCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBDU1NTdHJpY3RNb2RlKTsKKyAgICBSZWZQdHI8
U3R5bGVLZXlmcmFtZT4ga2V5ZnJhbWUgPSBwYXJzZXIucGFyc2VLZXlmcmFtZVJ1bGUoc3R5bGVT
aGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlVGV4dCk7CiAgICAgaWYgKCFr
ZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsOSBA
QCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IERPTUltcGxlbWVudGF0CiB7CiAgICAgLy8gRklY
TUU6IFRpdGxlIHNob3VsZCBiZSBzZXQuCiAgICAgLy8gRklYTUU6IE1lZGlhIGNvdWxkIGhhdmUg
d3Jvbmcgc3ludGF4LCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBleGNlcHRp
b24uCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc2hlZXQgPSBTdHlsZVNoZWV0
SW50ZXJuYWw6OmNyZWF0ZSgpOwogICAgIHNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVy
eVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtZWRpYSkpOwotICAgIHJldHVy
biBzaGVldC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVl
dCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB2YWxpZFhNTE1JTUVUeXBlQ2hhcnMg
PSAiWzAtOWEtekEtWl9cXC0rfiEkXFxee318LiUnYCMmKl0iOyAvLyBwZXIgUkZDczogMzAyMywg
MjA0NQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vKQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0yNTU3LDcgKzI1NTcsNyBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAgICAgICAgbV9iYXNlVVJMID0gS1VSTCgpOwogCiAg
ICAgaWYgKG1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldC0+c2V0RmluYWxVUkwobV9i
YXNlVVJMKTsKKyAgICAgICAgbV9lbGVtU2hlZXQtPmludGVybmFsKCktPnNldEZpbmFsVVJMKG1f
YmFzZVVSTCk7CiAgICAgCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVy
KG9sZEJhc2VVUkwsIG1fYmFzZVVSTCkpIHsKICAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNo
YW5nZXMgYW55IHJlbGF0aXZlIHZpc2l0ZWQgbGlua3MuCkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBi
b29sIERvY3VtZW50OjpjYW5CZUFjY2Vzc2VkQnlFdmVyeUFuY2VzCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUNTU1N0eWxlU2hlZXQqIERvY3VtZW50OjpwYWdlVXNlclNoZWV0KCkKK1N0eWxlU2hl
ZXRJbnRlcm5hbCogRG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQoKQogewogICAgIGlmIChtX3BhZ2VV
c2VyU2hlZXQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CkBAIC0yNzAy
LDcgKzI3MDIsNyBAQCBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUg
aXQuCi0gICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRo
aXMsIHNldHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CisgICAgbV9wYWdlVXNl
clNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3Mo
KS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsKICAgICBtX3BhZ2VVc2VyU2hlZXQtPnNldElz
VXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAgICAgbV9wYWdlVXNlclNoZWV0LT5wYXJzZVN0cmluZyh1
c2VyU2hlZXRUZXh0LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAg
ICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKQEAgLTI3MjMsNyArMjcyMyw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQogICAgICAgICBzdHlsZVNlbGVjdG9y
Q2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0
Citjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogRG9jdW1lbnQ6OnBh
Z2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAogewogICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVl
dENhY2hlVmFsaWQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VHcm91cFVzZXJTaGVldHMuZ2V0KCk7
CkBAIC0yNzQ4LDExICsyNzQ4LDExIEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiogRG8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnModXJsKCksIHNoZWV0LT53aGl0ZWxp
c3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYXJzZWRTaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Kj4odGhpcyksIHNoZWV0LT51cmwo
KSk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBwYXJzZWRTaGVldCA9
IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPih0
aGlzKSwgc2hlZXQtPnVybCgpKTsKICAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5zZXRJc1VzZXJT
dHlsZVNoZWV0KHNoZWV0LT5sZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbCk7CiAgICAgICAg
ICAgICBwYXJzZWRTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpLCBzdHJpY3RUb0NT
U1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcGFnZUdy
b3VwVXNlclNoZWV0cykKLSAgICAgICAgICAgICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KTsKKyAgICAgICAgICAg
ICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRz
LT5hcHBlbmQocGFyc2VkU2hlZXQucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3
NzYsMTAgKzI3NzYsMTAgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0
cwogICAgICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gdXNlclNoZWV0KQordm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8U3R5
bGVTaGVldEludGVybmFsPiB1c2VyU2hlZXQpCiB7CiAgICAgaWYgKCFtX3VzZXJTaGVldHMpCi0g
ICAgICAgIG1fdXNlclNoZWV0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4pOworICAgICAgICBtX3VzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAgIG1fdXNlclNoZWV0cy0+YXBwZW5kKHVz
ZXJTaGVldCk7CiAgICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSk7CiB9CkBAIC0yNzg3LDcgKzI3ODcsNyBAQCB2b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQo
UGFzc1JlZlB0cjxDCiBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsK
ICAgICBpZiAoIW1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1TaGVldCA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSh0
aGlzLCBtX2Jhc2VVUkwpKTsKICAgICByZXR1cm4gbV9lbGVtU2hlZXQuZ2V0KCk7CiB9CiAKQEAg
LTMzMTYsMTAgKzMzMTYsOCBAQCB2b2lkIERvY3VtZW50Ojpjb2xsZWN0QWN0aXZlU3R5bGVzaGVl
dHMoCiAgICAgfQogfQogCi1ib29sIERvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWly
ZXNTdHlsZVJlY2FsYyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0KQorYm9vbCBEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZXNoZWV0KQogewotICAgIGlmIChzdHlsZXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgLy8gU2VlIGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJl
IHNjb3BlZCB0byBzb21lIHNwZWNpZmljIGlkcyBvciBjbGFzc2VzLgogICAgIC8vIFRoZW4gdGVz
dCBpZiB3ZSBhY3R1YWxseSBoYXZlIGFueSBvZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9t
ZW50LgogICAgIC8vIEZJWE1FOiBFdmVuIHdlIGlmIHdlIGZpbmQgc29tZSwgd2UgY291bGQganVz
dCBpbnZhbGlkYXRlIHRob3NlIHN1YnRyZWVzIGluc3RlYWQgb2YgaW52YWxpZGF0aW5nIHRoZSBl
bnRpcmUgc3R5bGUuCkBAIC0zMzkxLDcgKzMzODksOSBAQCB2b2lkIERvY3VtZW50OjphbmFseXpl
U3R5bGVzaGVldENoYW5nZShTCiAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENv
dW50OyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKICAgICAgICAgaWYgKCFuZXdTdHls
ZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpKSkKKyAgICAgICAgaWYg
KG5ld1N0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpLT5pbnRlcm5hbCgp
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNh
bGMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTM4NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICsz
LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtMTI3LDYgKzEyNyw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3Mg
U3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRM
aXN0OwogY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CkBAIC02MjMsMTYg
KzYyNCwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5OYXZpZ2F0ZShGcmFtZSogdGFyZ2V0RnJh
bWUpOwogICAgIGJvb2wgY2FuQmVBY2Nlc3NlZEJ5RXZlcnlBbmNlc3RvckZyYW1lKCk7CiAKLSAg
ICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7CisgICAgU3R5bGVTaGVldEludGVybmFs
KiBwYWdlVXNlclNoZWV0KCk7CiAgICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICB2
b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0OworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzKCkg
Y29uc3Q7CiAgICAgdm9pZCBjbGVhclBhZ2VHcm91cFVzZXJTaGVldHMoKTsKICAgICB2b2lkIHVw
ZGF0ZVBhZ2VHcm91cFVzZXJTaGVldHMoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
U2hlZXRzLmdldCgpOyB9Ci0gICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0PiB1c2VyU2hlZXQpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiA+KiBkb2N1bWVudFVzZXJTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTaGVl
dHMuZ2V0KCk7IH0KKyAgICB2b2lkIGFkZFVzZXJTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJ
bnRlcm5hbD4gdXNlclNoZWV0KTsKIAogICAgIENTU1N0eWxlU2hlZXQqIGVsZW1lbnRTaGVldCgp
OwogICAgIApAQCAtMTE4MSw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIHVw
ZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnKTsKICAgICB2b2lk
IGNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsK
LSAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxl
U2hlZXQqKTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxj
KFN0eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2Uo
U3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCBib29s
JiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIGRlbGV0ZUN1c3RvbUZvbnRz
KCk7CkBAIC0xMjU3LDkgKzEyNTgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNOb2Rlc1dp
dGhQbGFjZWhvbGRlclN0eWxlOwogCiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fZWxlbVNo
ZWV0OwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VVc2VyU2hlZXQ7Ci0gICAgbXV0
YWJsZSBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+ID4gbV9wYWdlR3JvdXBV
c2VyU2hlZXRzOwotICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gPiBt
X3VzZXJTaGVldHM7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbV9wYWdlVXNlclNo
ZWV0OworICAgIG11dGFibGUgT3duUHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hlZXRzOworICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0
eWxlU2hlZXRJbnRlcm5hbD4gPiA+IG1fdXNlclNoZWV0czsKICAgICBtdXRhYmxlIGJvb2wgbV9w
YWdlR3JvdXBVc2VyU2hlZXRDYWNoZVZhbGlkOwogCiAgICAgYm9vbCBtX3ByaW50aW5nOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lv
biAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVsZW1lbnRBdHRy
aWJ1dGVEYXRhLmgiCiAKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiU3R5
bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04Miw3ICs4Myw3IEBAIHZv
aWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnVwZGF0ZUlubGluZVMKICAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wtPnNldENTU1BhcnNlck1vZGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkp
KTsKICAgICB9Ci0gICAgbV9pbmxpbmVTdHlsZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgIG1faW5saW5lU3R5bGVE
ZWNsLT5wYXJzZURlY2xhcmF0aW9uKHRleHQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRT
aGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVz
dHJveUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMTEzODUxKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMSwxNSArMjExLDE2IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpz
ZXRDU1NTdHlsZVMKICAgICB9CiAKICAgICBBU1NFUlQobV9pc0NTUyk7Ci0gICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IG5ld1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYs
IGJhc2VVUkwsIGNoYXJzZXQpOwotICAgIG1fc2hlZXQgPSBuZXdTaGVldDsKKyAgICBSZWZQdHI8
U3R5bGVTaGVldEludGVybmFsPiBuZXdTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRl
KHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGUobmV3U2hlZXQpOwogICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGNyb3NzLW9y
aWdpbiBzZWN1cml0eSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgYXJlCiAgICAgLy8gZ2V0dGluZyB0
aGUgc2hlZXQgdGV4dCBpbiAic3RyaWN0IiBtb2RlLiBUaGlzIGVuZm9yY2VzIGEgdmFsaWQgQ1NT
IE1JTUUKICAgICAvLyB0eXBlLgotICAgIHBhcnNlU3R5bGVTaGVldChzaGVldC0+c2hlZXRUZXh0
KHRydWUpKTsKICAgICBuZXdTaGVldC0+c2V0VGl0bGUobV90aXRsZSk7CiAgICAgbmV3U2hlZXQt
PnNldE1lZGlhUXVlcmllcyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUobV9tZWRpYSkpOwotICAgIG5l
d1NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisgICAgbV9zaGVldC0+c2V0RGlzYWJs
ZWQobV9hbHRlcm5hdGUpOworCisgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQo
dHJ1ZSkpOwogfQogCiAjaWYgRU5BQkxFKFhTTFQpCkBAIC0yMzMsNyArMjM0LDExIEBAIHZvaWQg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRYU0xTdHlsZVMKIAogdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KQogewotICAgIG1f
c2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0LCBDU1NTdHJpY3RNb2RlKTsKKyAgICBpZiAobV9pc0NT
UykKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5p
bnRlcm5hbCgpLT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisgICAgZWxzZSBp
ZiAobV9pc1hTTCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KG1fc2hlZXQu
Z2V0KCkpLT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisKICAgICBpZiAobV9j
YWNoZWRTaGVldCkKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwog
ICAgIG1fY2FjaGVkU2hlZXQgPSAwOwpAQCAtMjQxLDcgKzI0Niw3IEBAIHZvaWQgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpwYXJzZVN0eWxlU2gKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKIAogICAg
IGlmIChtX2lzQ1NTKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obV9zaGVl
dC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihtX3NoZWV0LmdldCgpKS0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKICNpZiBFTkFC
TEUoWFNMVCkKICAgICBlbHNlIGlmIChtX2lzWFNMKQogICAgICAgICBzdGF0aWNfY2FzdDxYU0xT
dHlsZVNoZWV0Kj4obV9zaGVldC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7CkBAIC0yNTMsOCArMjU4
LDggQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxlUwogICAgIEFTU0VS
VCghbV9jYWNoZWRTaGVldCk7CiAgICAgQVNTRVJUKCFtX2xvYWRpbmcpOwogICAgIG1fc2hlZXQg
PSBzaGVldDsKLSAgICBtX3NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKLSAgICBtX3NoZWV0LT5z
ZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisgICAgc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxl
KG1fdGl0bGUpOworICAgIHNoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CiB9CiAKIGJv
b2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQs
MTYgKzE2NCwxNyBAQCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAg
ICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSB8fCBwcmludEV2
YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
UGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAgICAg
ICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBk
b2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3Ry
aW5nQXRMaW5lKHRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpKSwgc3RhcnRMaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldE1lZGlh
UXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNl
dFRpdGxlKGUtPnRpdGxlKCkpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5h
bD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKGUsIFN0cmluZygpLCBL
VVJMKCksIGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOworICAgICAgICAgICAgc3R5bGVTaGVl
dC0+cGFyc2VTdHJpbmdBdExpbmUodGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVu
dC0+aW5RdWlya3NNb2RlKCkpLCBzdGFydExpbmVOdW1iZXIpOworICAgICAgICAgICAgc3R5bGVT
aGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOworICAgICAgICAg
ICAgc3R5bGVTaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CisgICAgICAgICAgICBtX3NoZWV0
ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQpOwogICAgICAgICAgICAgbV9sb2Fk
aW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9zaGVldCkKLSAgICAg
ICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgbV9zaGVldC0+aW50ZXJuYWwoKS0+
Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJv
cGVyCiAKIGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQog
ewotICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJs
ZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5z
dXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRT
aGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgaW5saW5lU3R5
bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIGNoYW5nZXM7CkBAIC0yMjYsNyArMjI2LDcgQEAgYm9v
bCBTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVBybwogdm9pZCBTdHlsZWRFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNv
bnN0CiB7CiAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRl
RGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKLSAgICAgICAgaW5s
aW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1l
bnRTaGVldCgpKTsKKyAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIGF0dHJpYnV0ZU5hbWVTb3J0KGNvbnN0IHBhaXI8QXRvbWljU3RyaW5n
SW1wbCosIEF0b21pY1N0cmluZz4mIHAxLCBjb25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBB
dG9taWNTdHJpbmc+JiBwMikKQEAgLTMzMyw1ICszMzMsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50
OjphZGRQcm9wZXJ0eVRvQXR0cmlidQogewogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQorICAgIAor
dm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGZhbHNl
LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7Cit9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsx
MTMsNiBAQCBpbmxpbmUgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6CiAgICAgcmV0
dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6
IDA7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1
dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCB2YWx1ZSwgZmFsc2UsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKLX0KLQogfSAv
L25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxl
bWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xNzYsNyAr
MTc3LDcgQEAgdm9pZCBIVE1MRm9udEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvckF0dAogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9y
VG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlDb2xvciwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGZhY2VBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhY2VW
YWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSkpCisgICAgICAg
IGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlRm9udEZhY2VWYWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKS0+aW50ZXJuYWwoKSkpCiAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250RmFjZVZhbHVlLnJlbGVhc2UoKSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRl
KGF0dHIsIHN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHQKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
dGl0bGVBdHRyICYmIG1fc2hlZXQpCi0gICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRy
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7
CiAgICAgfQogfQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5h
bDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgYm9vbCBzdHJp
Y3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpOwogICAgIGJvb2wgZW5mb3Jj
ZU1JTUVUeXBlID0gc3RyaWN0UGFyc2luZzsKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAjZW5kaWYKIAogICAgIFN0cmluZyBzaGVl
dFRleHQgPSBzaGVldC0+c2hlZXRUZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUp
OwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJN
b2RlKHN0cmljdFBhcnNpbmcpKTsKKyAgICBzdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldFRl
eHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShzdHJpY3RQYXJzaW5nKSk7CiAKICAgICAvLyBJZiB3
ZSdyZSBsb2FkaW5nIGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4sIGFuZCB0aGUgTUlNRSB0eXBl
IGlzIG5vdAogICAgIC8vIHN0YW5kYXJkLCByZXF1aXJlIHRoZSBDU1MgdG8gYXQgbGVhc3Qgc3Rh
cnQgd2l0aCBhIHN5bnRhY3RpY2FsbHkKQEAgLTMxNiw4ICszMTYsOCBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGJhc2VVUkwpKQogICAgICAgICBjcm9zc09yaWdpbkNTUyA9
IHRydWU7CiAKLSAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1f
c2hlZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3NoZWV0
ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwor
ICAgIGlmIChjcm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhc3R5bGVTaGVldC0+
aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCisgICAgICAgIHN0eWxlU2hlZXQgPSBT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsK
IAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAg
ICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgzNTA+LgpAQCAtMzI3LDIwICszMjcsMjAgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhl
IHNlY29uZCB0cmFpbGluZyBuZXdsaW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5l
bmRzV2l0aChzbGFzaEtIVE1MRml4ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYg
bWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAg
ICAgICAgICAgICAgJiYgc2hlZXRUZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNT
dHlsZVNoZWV0Lmxlbmd0aCgpIC0gMSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPmxl
bmd0aCgpID09IDEpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAg
IG1fc2hlZXQtPmRlbGV0ZVJ1bGUoMCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlU2hl
ZXQtPnJ1bGVDb3VudCgpID09IDEpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+Y2xlYXJSdWxl
cygpOwogICAgICAgICB9CiAgICAgfQorICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVh
dGUoc3R5bGVTaGVldCk7CiAKLSAgICBtX3NoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKKyAgICBz
dHlsZVNoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKIAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0
PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgo
bV9tZWRpYSk7Ci0gICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7
CisgICAgc3R5bGVTaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CiAKICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBtX3NoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChzaGVl
dCk7Ci0gICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICBzdHlsZVNoZWV0LT5ub3RpZnlM
b2FkZWRTaGVldChzaGVldCk7CisgICAgc3R5bGVTaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAog
Ym9vbCBIVE1MTGlua0VsZW1lbnQ6OnN0eWxlU2hlZXRJc0xvYWRpbmcoKSBjb25zdApAQCAtMzQ5
LDcgKzM0OSw3IEBAIGJvb2wgSFRNTExpbmtFbGVtZW50OjpzdHlsZVNoZWV0SXNMb2FkaW4KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFtX3NoZWV0KQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fc2hlZXQtPmlzTG9hZGluZygpOworICAgIHJldHVybiBtX3NoZWV0
LT5pbnRlcm5hbCgpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6Omxp
bmtMb2FkZWQoKQpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHIKICAgICAKICAgICAvLyBXYWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUg
bGlua2VkLXRvIHN0eWxlc2hlZXQuCiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBjb25zdF9jYXN0PEhUTUxMaW5rRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBz
dHlsZVNoZWV0LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIHZv
aWQgSFRNTExpbmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQoUGVuZGluZ1NoZWV0VHlwZSB0eXBl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIFBhc3NSZWZQdHI8SFRNTFN0eWxlRWxlbWVu
dD4gSFRNTFN0eWxlRWwKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1f
c2hlZXQpCi0gICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAg
ICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJv
ckF0dHIpCkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dAogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMo
dXJscyk7CiAKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8
SFRNTFN0eWxlRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+aW50ZXJu
YWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxl
RWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENT
U1J1bGUqIAogICAgICAgICAgICAgbWVkaWFMaXN0ID0gMDsKIAogICAgICAgICBpZiAocGFyZW50
U3R5bGVTaGVldCkgewotICAgICAgICAgICAgc291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVldC0+
ZmluYWxVUkwoKTsKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhcmVudFN0eWxlU2hlZXQtPmlu
dGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICBpZiAoc291cmNlVVJMLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1l
bnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkpOwogICAgICAgICB9
IGVsc2UKQEAgLTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4o
Q1NTUnVsZSogCiAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdHlsZVNoZWV0
LT5maW5kRG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRvYykKICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IGRvYy0+dXJsKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmZpbmFsVVJMKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVS
TCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxl
U2hlZXQtPmludGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogICAgICAgICAgICAgICAg
ICAgICBtZWRpYUFycmF5LT5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBzdHls
ZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtlZFNoZWV0IDogTWVkaWFM
aXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnMKICAgICAgICAgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUoKTsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENT
U1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIENTU1BhcnNlciBwOwotICAgICAg
ICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0
ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5
bGUtPnBhcmVudFN0eWxlU2hlZXQoKSk7CisgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1w
TXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFt
ZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5p
bnRlcm5hbCgpKTsKICAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3Bl
cnR5RGF0YSA9IHNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJv
cGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKQEAgLTY4OSw4ICs2ODksOCBAQCBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvCiAvLyBzdGF0aWMKIFN0cmlu
ZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0KQogewotICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQt
PmZpbmFsVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGFnZVN0eWxlU2hlZXQtPmZp
bmFsVVJMKCkuc3RyaW5nKCk7CisgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBw
YWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5zdHJpbmcoKTsKICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIH0KIApAQCAtNzE4LDggKzcxOCw5IEBAIFN0cmluZyBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpmaW5hbFVSTCgpIGMKIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgbV9wYWdlU3R5bGVT
aGVldC0+Y2xlYXJSdWxlcygpOwotICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRl
eHQsIG1fcGFnZVN0eWxlU2hlZXQtPmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxlcygpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmlu
dGVybmFsKCktPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCkt
PmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJDaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzKCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQo
KTsKICAgICBtX2luc3BlY3RvclN0eWxlcy5jbGVhcigpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hh
bmdlZCgpOwpAQCAtMTA4NywxNCArMTA4OCwxNCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmVuc3VyZVNvdXJjZURhCiAgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0
eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKTsK
ICAgICBDU1NQYXJzZXIgcDsKICAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CiAg
ICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+
dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKICAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6
U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpT
b3VyY2VEYXRhKSk7CiAKICAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QobmV3U3R5bGVTaGVldC5n
ZXQoKSk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKICAgICBjb2xsZWN0
RmxhdFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlUmFu
Z2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxl
UnVsZSgpKTsKQEAgLTE0MTQsNyArMTQxNSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjoKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFy
YXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcDsKLSAg
ICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwg
cmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBwLnBh
cnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVzdWx0
LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaAogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYg
IW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5v
bmUgd2FzIGZvdW5kIGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmco
c3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGlu
ZyhzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4
dEVuY29kaW5nLmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4
dC50b1N0cmluZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2Rl
KHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFNWR1N0eWxlRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0CiAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0aXRsZUF0dHIpIHsKICAgICAgICAgaWYgKG1fc2hlZXQpCi0gICAgICAgICAgICBtX3No
ZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVy
bmFsKCktPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRh
dGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNjksMTAgKzY5LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBj
b25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZU1vZGUgPSBDU1NTdHJpY3RN
b2RlKTsKKyAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VNb2RlID0gQ1NTU3RyaWN0TW9kZSk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlz
TG9hZGluZygpOworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2b2lk
IGNoZWNrTG9hZGVkKCk7CisgICAgCisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7
IHJldHVybiBtX2ZpbmFsVVJMOyB9CiAKICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOwogICAg
IHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKTsKQEAgLTgwLDcgKzgyLDcg
QEAgcHVibGljOgogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwogCiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKTsKLSAgICBYU0xTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9
CisgICAgdmlydHVhbCBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCBzZXRQYXJlbnRT
dHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7CiAKICNpZiBVU0UoUVhNTFFVRVJZKQpA
QCAtOTUsMTIgKzk3LDI2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7
CiAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorICAg
IAorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sIGIpIE9WRVJS
SURFIHsgbV9pc0Rpc2FibGVkID0gYjsgfQorICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lck5vZGU7IH0KKyAgICB2aXJ0dWFsIFN0cmlu
ZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vcmlnaW5hbFVSTDsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZFUlJJREUgeyBtX293
bmVyTm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KIAogcHJpdmF0ZToKICAgICBYU0xTdHlsZVNoZWV0KE5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZp
bmFsVVJMLCBib29sIGVtYmVkZGVkKTsKICNpZiAhVVNFKFFYTUxRVUVSWSkKICAgICBYU0xTdHls
ZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBvcmlnaW5h
bFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwpOwogI2VuZGlmCisgICAgCisgICAgTm9kZSogbV9v
d25lck5vZGU7CisgICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFsVVJM
OworICAgIGJvb2wgbV9pc0Rpc2FibGVkOwogCiAgICAgVmVjdG9yPE93blB0cjxYU0xJbXBvcnRS
dWxlPiA+IG1fY2hpbGRyZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNo
ZWV0TGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXRMaWJ4c2x0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgogICoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01NSw3ICs1NSwxMCBAQCBTT0ZUX0xJTksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0
UEksCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQo
WFNMSW1wb3J0UnVsZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29u
c3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBTdHlsZVNoZWV0KHN0YXRpY19jYXN0PE5vZGUqPigw
KSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMKQorICAgIDogbV9vd25lck5vZGUoMCkKKyAgICAsIG1f
b3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQorICAg
ICwgbV9pc0Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9lbWJlZGRlZChmYWxzZSkKICAgICAsIG1f
cHJvY2Vzc2VkKGZhbHNlKSAvLyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQg
d2hlbiB0aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgogICAgICwgbV9z
dHlsZXNoZWV0RG9jKDApCkBAIC02NSw3ICs2OCwxMCBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHls
ZVNoZWV0KFhTTEltcG9ydFJ1CiB9CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9k
ZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmlu
YWxVUkwsICBib29sIGVtYmVkZGVkKQotICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBvcmln
aW5hbFVSTCwgZmluYWxVUkwpCisgICAgOiBtX293bmVyTm9kZShwYXJlbnROb2RlKQorICAgICwg
bV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisg
ICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQogICAg
ICwgbV9wcm9jZXNzZWQodHJ1ZSkgLy8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNz
ZWQuCiAgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKQEAgLTg1LDcgKzkxLDcgQEAgWFNMU3R5bGVT
aGVldDo6flhTTFN0eWxlU2hlZXQoKQogICAgIH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojpp
c0xvYWRpbmcoKQorYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChtX2NoaWxkcmVuLmF0KGkpLT5pc0xvYWRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
MTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVl
dChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUs
IG9yaWdpbmFsVVJMLCBmaW5hbFVSTCkKKyAgICA6IG1fb3duZXJOb2RlKHBhcmVudE5vZGUpCisg
ICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9maW5hbFVSTChmaW5hbFVS
TCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKICAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQp
CiB7CiB9CkBAIC00Nyw3ICs1MCw3IEBAIFhTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KCkK
ICAgICB9CiB9CiAKLWJvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKK2Jvb2wgWFNMU3R5
bGVTaGVldDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IHJldHVybiBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="141561"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136708</attachid>
            <date>2012-04-11 11:05:54 -0700</date>
            <delta_ts>2012-04-11 13:38:30 -0700</delta_ts>
            <desc>resubmitting for bots</desc>
            <filename>stylesheet-internal-19.patch</filename>
            <type>text/plain</type>
            <size>120741</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3Rvcjogc2hvd2luZyBzdW1tYXJ5IHZpZXcgaXMgdmVyeSBzbG93IG9uIGEgc25h
cHNob3Qgd2l0aCB0aG91c2FuZHMgb2YgY29uc3RydWN0b3JzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFpc0xvY2FsKCkpCiAgICAgICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIHN0eWxlU2hlZXQtPmNvbXBsZXRlVVJMKG1fcmVzb3VyY2UpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9t
Q3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVy
bmFsKik7CiAKICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250KERvY3VtZW50Kik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTIgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTdHlsZVJ1
bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorUGFz
c1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKFN0eWxlU2hl
ZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFR
dWVyeVNldD4gbWVkaWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVJbXBv
cnQocGFyZW50LCBocmVmLCBtZWRpYSkpOwogfQogCi1TdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVs
ZUltcG9ydChDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKK1N0eWxlUnVsZUltcG9ydDo6U3R5bGVSdWxlSW1w
b3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NS
ZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKEltcG9ydCwg
MCkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVldChwYXJlbnQpCiAgICAgLCBtX3N0eWxlU2hlZXRD
bGllbnQodGhpcykKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENT
U1N0eWxlU2hlZXQoYwogewogICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVT
aGVldC0+Y2xlYXJPd25lclJ1bGUoKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgbV9zdHlsZVNoZWV0
ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNl
dCk7CiAKICAgICBib29sIGNyb3NzT3JpZ2luQ1NTID0gZmFsc2U7CiAgICAgYm9vbCB2YWxpZE1J
TUVUeXBlID0gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0Ojpz
ZXRDU1NTdHlsZVNoZWV0KGMKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwogCiAgICAg
aWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3N0eWxlU2hlZXQtPmhh
c1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3N0eWxlU2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
ICAgIG1fc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYs
IGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgaWYgKGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJz
ZXJNb2RlKSAmJiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykgewogICAgICAgICAvLyBXb3JrIGFy
b3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzUwPi4KQEAg
LTk4LDkgKzk4LDggQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwog
ICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXds
aW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4
ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0
eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAgICAgICAgICAgICAgJiYgc2hlZXRU
ZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0Lmxlbmd0aCgpIC0g
MSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc3R5bGVTaGVldC0+bGVuZ3RoKCkgPT0gMSk7Ci0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgbV9zdHlsZVNoZWV0LT5k
ZWxldGVSdWxlKDAsIGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0eWxlU2hlZXQtPmNoaWxk
UnVsZXMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBtX3N0eWxlU2hlZXQtPmNsZWFyUnVs
ZXMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM2LDggKzEzNSw4IEBAIHZvaWQgU3R5bGVS
dWxlSW1wb3J0OjpyZXF1ZXN0U3R5bGVTaGVldCgKIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xl
IGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAg
Ly8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwu
Ci0gICAgQ1NTU3R5bGVTaGVldCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OwotICAg
IGZvciAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBz
aGVldCA9IHNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKKyAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIHJvb3RTaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsKKyAgICBmb3IgKFN0eWxlU2hlZXRJ
bnRlcm5hbCogc2hlZXQgPSBtX3BhcmVudFN0eWxlU2hlZXQ7IHNoZWV0OyBzaGVldCA9IHNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmcg
aWYgdGhlIGZpbmFsVVJMIHdhcyB1cGRhdGVkIHZpYSBkb2N1bWVudDo6dXBkYXRlQmFzZVVSTC4K
ICAgICAgICAgaWYgKGFic0hyZWYgPT0gc2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNjYsNiArMTY1LDEyIEBAIENTU0ltcG9ydFJ1bGU6OkNTU0lt
cG9ydFJ1bGUoU3R5bGVSdWxlSW0KIHsKIH0KIAorQ1NTSW1wb3J0UnVsZTo6fkNTU0ltcG9ydFJ1
bGUoKQoreworICAgIGlmIChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlci0+Y2xlYXJPd25lclJ1bGUoKTsKK30KKwogTWVkaWFMaXN0KiBD
U1NJbXBvcnRSdWxlOjptZWRpYSgpCiB7CiAgICAgcmV0dXJuIG1faW1wb3J0UnVsZS0+bWVkaWFR
dWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChwYXJlbnRTdHlsZVNoZWV0KCkpOwpAQCAtMTg3LDQg
KzE5MiwxNSBAQCBTdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCitDU1NTdHlsZVNoZWV0KiBDU1NJbXBvcnRSdWxl
OjpzdHlsZVNoZWV0KCkgY29uc3QKK3sgCisgICAgaWYgKCFtX2ltcG9ydFJ1bGUtPnN0eWxlU2hl
ZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fc3R5bGVTaGVldENTU09NV3Jh
cHBlcikKKyAgICAgICAgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyID0gQ1NTU3R5bGVTaGVldDo6
Y3JlYXRlKG1faW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBjb25zdF9jYXN0PENTU0ltcG9ydFJ1
bGUqPih0aGlzKSk7CisgICAgcmV0dXJuIG1fc3R5bGVTaGVldENTU09NV3JhcHBlci5nZXQoKTsg
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIE1lZGlhTGlzdDsKIGNs
YXNzIE1lZGlhUXVlcnlTZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiAKIGNsYXNzIFN0
eWxlUnVsZUltcG9ydCA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJl
bnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoU3R5bGVTaGVldEludGVy
bmFsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0
Pik7CiAKICAgICB+U3R5bGVSdWxlSW1wb3J0KCk7CiAgICAgCi0gICAgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQor
ICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3R5bGVTaGVldDsgfQogICAgIHZvaWQgY2xlYXJQYXJlbnRTdHlsZVNoZWV0KCkg
eyBtX3BhcmVudFN0eWxlU2hlZXQgPSAwOyB9CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RySHJlZjsgfQotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KIAogICAg
IC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTS4KICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwpA
QCAtNzAsMTUgKzcxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgZnJpZW5kIGNsYXNzIEltcG9y
dGVkU3R5bGVTaGVldENsaWVudDsKIAotICAgIFN0eWxlUnVsZUltcG9ydChDU1NTdHlsZVNoZWV0
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CisgICAgU3R5bGVSdWxlSW1wb3J0KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50LCBjb25zdCBT
dHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOwogCi0gICAgLy8gRlhJTUU6
IFRoaXMgbmVlZHMgdG8gZ28gYXdheS4KLSAgICBDU1NTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxl
U2hlZXQ7CisgICAgU3R5bGVTaGVldEludGVybmFsKiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAKICAg
ICBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQgbV9zdHlsZVNoZWV0Q2xpZW50OwogICAgIFN0cmlu
ZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwot
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CisgICAgUmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gbV9zdHlsZVNoZWV0OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZENTU1N0eWxlU2hlZXQ+IG1fY2FjaGVkU2hlZXQ7CiAgICAgYm9vbCBtX2xvYWRpbmc7CiB9
OwpAQCAtODYsMTAgKzg2LDEyIEBAIHByaXZhdGU6CiBjbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0ltcG9ydFJ1
bGU+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9CisgICAg
CisgICAgfkNTU0ltcG9ydFJ1bGUoKTsKIAogICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRSdWxlLT5ocmVmKCk7IH0KICAgICBNZWRpYUxpc3QqIG1lZGlhKCk7Ci0gICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpOyB9CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0Owog
ICAgIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKQEAgLTk3LDYgKzk5LDggQEAgcHJp
dmF0ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCosIENTU1N0eWxlU2hlZXQq
KTsKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IG1faW1wb3J0UnVsZTsKKworICAgIG11
dGFibGUgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
ZWRpYVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1
bGUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2
LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTgsOCArNTgsOSBAQCB1
bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3QgCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIENTU1BhcnNlciBwKGNzc1BhcnNlck1vZGUoKSk7Ci0gICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwLnBhcnNlUnVsZShwYXJlbnRTdHlsZVNoZWV0KCks
IHJ1bGVTdHJpbmcpOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHls
ZVNoZWV0KCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcihzdHlsZVNoZWV0ID8gc3R5bGVTaGVldC0+
aW50ZXJuYWwoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSk7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwYXJzZXIucGFyc2VSdWxlKHN0eWxlU2hlZXQgPyBz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMCwgcnVsZVN0cmluZyk7CiAgICAgaWYgKCFuZXdSdWxl
KSB7CiAgICAgICAgIC8vIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUg
aGFzIGEgc3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxlLgogICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTEzODUxKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Miw3ICsyNTIsNyBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogCiAg
ICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGlu
ZU51bWJlciwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKK3ZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9
IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldAogICAgIG1fcnVs
ZSA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXJzZVJ1
bGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJuYWwq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0
KTsKICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CkBAIC0yNzksNyAr
Mjc5LDcgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcgogICAgIHJl
dHVybiBtX3J1bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENT
U1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCAqc2hlZXQsIGNvbnN0IFN0
cmluZyAmc3RyaW5nKQorUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OnBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyAmc3Ry
aW5nKQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIHNldHVwUGFyc2VyKCJALXdl
YmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwpAQCAtOTA5LDcgKzkwOSw3IEBA
IHN0YXRpYyBib29sIHBhcnNlS2V5d29yZFZhbHVlKFN0eWxlUHJvcGUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFj
ZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9u
dEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldEludGVybmFs
KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gZHVt
bXlTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIGlmICghcGFyc2VWYWx1
ZShkdW1teVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHN0cmluZywgZmFsc2Us
IENTU1F1aXJrc01vZGUsIGNvbnRleHRTdHlsZVNoZWV0KSkKQEAgLTkxNyw3ICs5MTcsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzCiAgICAgcmV0dXJuIHN0YXRp
Y19wb2ludGVyX2Nhc3Q8Q1NTVmFsdWVMaXN0PihkdW1teVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQs
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlv
biwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTkyOSw3ICs5MjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0
aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwog
fQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJh
dGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hl
ZXQoY29udGV4dFN0eWxlU2hlZXQpOwogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImCiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVudCogZG9jLCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCkKIHsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHls
ZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gZHVtbXlTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUo
ZG9jKTsKIAogICAgIHNldFN0eWxlU2hlZXQoZHVtbXlTdHlsZVNoZWV0LmdldCgpKTsKICAgICBt
X3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAmc2VsZWN0b3JMaXN0OwpAQCAtMTAyMiw3
ICsxMDIyLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaQogICAg
IEFTU0VSVChkdW1teVN0eWxlU2hlZXQtPmhhc09uZVJlZigpKTsKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogc3R5bGVTb3VyY2VE
YXRhLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwg
U3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGgg
b2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgcHJlZml4TGVuZ3RoID0gMTU7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCB2b2lkIENTU1BhcnNl
cjo6Y2xlYXJQcm9wZXJ0aWVzKCkKICAgICBtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyA9IGZhbHNl
OwogfQogCi12b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KQordm9pZCBDU1NQYXJzZXI6OnNldFN0eWxlU2hlZXQoU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7CiB9CkBAIC03
MjgzLDcgKzcyODMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKGNvbnN0IFN0
CiAgICAgQVNTRVJUKGRvYyk7CiAgICAgQVNTRVJUKGRvYy0+Y3NzUmVnaW9uc0VuYWJsZWQoKSk7
CiAKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHlsZVNoZWV0ID0gQ1NTU3R5bGVT
aGVldDo6Y3JlYXRlKGRvYyk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gZHVtbXlT
dHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoZG9jKTsKICAgICBzZXRTdHls
ZVNoZWV0KGR1bW15U3R5bGVTaGVldC5nZXQoKSk7CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJr
aXQtZGVjbHN7LXdlYmtpdC1mbG93LWludG86IiwgZmxvd05hbWUsICJ9Iik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgY2xhc3MgQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBDU1NQ
cm9wZXJ0eTsKIGNsYXNzIENTU1NlbGVjdG9yTGlzdDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7CiBj
bGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENTU1dyYXBTaGFwZTsK
QEAgLTYyLDYgKzYxLDcgQEAgY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKIGNsYXNzIFN0
eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZUtleWZy
YW1lOworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIAog
Y2xhc3MgQ1NTUGFyc2VyIHsKQEAgLTcwLDE1ICs3MCwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q1NT
UGFyc2VyKCk7CiAKLSAgICB2b2lkIHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJh
bmdlTWFwID0gMCk7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBDU1NTdHlsZVNo
ZWV0Kik7CisgICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0
cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAwKTsK
KyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0SW50ZXJu
YWwqLCBjb25zdCBTdHJpbmcmKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0
IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBib29sIHBhcnNlU3lz
dGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBB
dG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShpbnQgaWRl
bnQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJv
cGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiosIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJj
ZURhdGE+KiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgUGFz
c093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgY29uc3Q7CkBAIC0yODYsNyArMjg2LDcgQEAgcHVi
bGljOgogICAgIENTU1BhcnNlck1vZGUgbV9jc3NQYXJzZXJNb2RlOwogICAgIGJvb2wgbV9pbXBv
cnRhbnQ7CiAgICAgQ1NTUHJvcGVydHlJRCBtX2lkOwotICAgIENTU1N0eWxlU2hlZXQqIG1fc3R5
bGVTaGVldDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIG1fc3R5bGVTaGVldDsKICAgICBSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gbV9ydWxlOwogICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tl
eWZyYW1lOwogICAgIE93blB0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsK
ICAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CiAKLSAgICB2b2lkIHNl
dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHls
ZVNoZWV0SW50ZXJuYWwqKTsKIAogICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IG1fY3NzUGFyc2Vy
TW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOyB9CiAgICAgaW5saW5lIGJvb2wgaW5RdWlya3NNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGU7IH0KQEAg
LTM2Myw3ICszNjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZVZhbHVl
KENTU1BhcnNlclZhbHVlKikgY29uc3Q7CiAgICAgYm9vbCBwYXJzZUdlbmVyYXRlZEltYWdlKENT
U1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIAotICAgIGJvb2wgcGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29s
IHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KTsKIAogICAgIGVudW0gU2l6ZVBhcmFtZXRlclR5cGUgewogICAgICAgICBOb25lLApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3Rv
bUNzc1RleHQoCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6
OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAobV9wcmltaXRpdmVVbml0VHlwZSA9
PSBDU1NfVVJJKQogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzdHlsZVNoZWV0LT5j
b21wbGV0ZVVSTChtX3ZhbHVlLnN0cmluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBtX2lzUXVpcmtWYWx1ZTsg
fQogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYs
IGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKICAgICBM
ZW5ndGggdmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCkKK3ZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0
KQogewogICAgIGlmIChtX21hc2spCiAgICAgICAgIG1fbWFzay0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgc3R5bGVTaGVldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RW
YWx1ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogCiBwcml2YXRlOgogICAgIENTU1JlZmxlY3RWYWx1ZShDU1NS
ZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBtYXNrKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVs
ZS5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSwxNSArNjksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlZ2lv
blJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX1JFR0lPTl9SVUxFOyB9CiAg
ICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSU1QT1JUX1JV
TEU7IH0KIAotICAgIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAocGFyZW50UnVsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJ1bGUo
KS0+Y3NzUGFyc2VyTW9kZSgpOwotICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlU2hlZXQoKS0+Y3NzUGFyc2VyTW9kZSgpOwotICAg
ICAgICByZXR1cm4gQ1NTU3RyaWN0TW9kZTsKLSAgICB9Ci0KICAgICB2b2lkIHNldFBhcmVudFN0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKICAgICB7CiAgICAgICAgIG1fcGFy
ZW50SXNSdWxlID0gZmFsc2U7CkBAIC0xMDIsMTMgKzkzLDYgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKLSAgICAgICAgcmV0dXJu
IEtVUkwoKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQq
IHBhcmVudCwgVHlwZSB0eXBlKQogICAgICAgICA6IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGZh
bHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRv
bVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3Iq
ID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAogICAgIHZvaWQgYWRkU3R5bGVSdWxl
KFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKICAgICB2b2lk
IGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1
bGUgPSBmYWxzZSk7CkBAIC0yODUsMTMgKzI4NSwxMyBAQCBzdGF0aWMgUnVsZVNldCogZGVmYXVs
dFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJj
ZVN0eWxlOwotc3RhdGljIENTU1N0eWxlU2hlZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Owot
c3RhdGljIENTU1N0eWxlU2hlZXQqIGRlZmF1bHRTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxl
U2hlZXQqIHF1aXJrc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc3ZnU3R5bGVT
aGVldDsKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBtYXRoTUxTdHlsZVNoZWV0Owotc3RhdGljIENT
U1N0eWxlU2hlZXQqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hl
ZXQqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBkZWZhdWx0
U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHF1aXJrc1N0eWxlU2hlZXQ7
CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBzdmdTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxl
U2hlZXRJbnRlcm5hbCogbWF0aE1MU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJu
YWwqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
ZnVsbHNjcmVlblN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpz
X3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCkBAIC0zOTksNyArMzk5LDcgQEAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3Mh
IFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3duUHRyPFJ1bGVT
ZXQ+IHRlbXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVT
aGVldCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpCisgICAgaWYg
KFN0eWxlU2hlZXRJbnRlcm5hbCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNo
ZWV0KCkpCiAgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2Vy
U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNl
clJ1bGVzRnJvbVNoZWV0cyhkb2N1bWVudC0+cGFnZUdyb3VwVXNlclNoZWV0cygpLCAqdGVtcFVz
ZXJTdHlsZSk7CiAgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0
cyhkb2N1bWVudC0+ZG9jdW1lbnRVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKQEAgLTQx
OCwxNCArNDE4LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0K
ICAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+
dmVjdG9yKCkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+KiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUpCit2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQm
IHVzZXJTdHlsZSkKIHsKICAgICBpZiAoIXVzZXJTaGVldHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+JiBzaGVldCA9IHVzZXJTaGVldHMtPmF0KGkpOworICAgICAgICBjb25zdCBSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiYgc2hlZXQgPSB1c2VyU2hlZXRzLT5hdChpKTsKICAgICAg
ICAgaWYgKHNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAg
IGVsc2UKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RG
ZWF0dXJlcygpCiB9CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotY29uc3QgQ29udGFpbmVy
Tm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVl
dCogc2hlZXQpCitjb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1p
bmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0KQogewogICAgIEFTU0VSVChz
aGVldCk7CiAKQEAgLTUwNCwxNyArNTA0LDE4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
ZW5kQXV0aG9yU3R5bGUKICAgICAgICAgaWYgKCFzdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNo
ZWV0KCkgfHwgc3R5bGVzaGVldHNbaV0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oc3R5bGVzaGVldHNbaV0uZ2V0KCkpOworICAgICAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIHNoZWV0ID0gY3NzU2hlZXQtPmludGVybmFsKCk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1pbmVTY29wZShj
c3NTaGVldCk7CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5l
U2NvcGUoc2hlZXQpOwogICAgICAgICBpZiAoc2NvcGUpIHsKICAgICAgICAgICAgIFNjb3BlZFJ1
bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQo
c2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQog
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNG
cm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9t
ZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQs
ICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICBpZiAoIW1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBl
cnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgY3NzU2hlZXQpOwogICAgIH0KQEAgLTY4
MCwxNCArNjgxLDE0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmNsZWFyKCkK
ICAgICB1c2VzTGlua1J1bGVzID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBw
YXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCitzdGF0aWMgU3R5bGVTaGVldEludGVybmFs
KiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCog
c2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNo
ZWV0IG9uIHB1cnBvc2UKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVl
dEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBv
c2UKICAgICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CiAK
LXN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVBU2hlZXQoY29uc3QgY2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVl
dChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQogewogICAgIHJldHVybiBw
YXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKIH0KQEAgLTIyMzcsNyArMjIz
OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TZWxlY3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAgICAgCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxl
c2hlZXRTZWxlY3RvclNjb3BlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
bGFzc1Njb3BlcykKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNl
bGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xh
c3NTY29wZXMpCiB7CiAgICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CiAKQEAg
LTI0NjIsNyArMjQ2Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVS
ZWcKICAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0
b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQu
cmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5
bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5
bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNo
ZWV0KTsKIApAQCAtMjkwMyw3ICsyOTA0LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKEhhc2hNYXAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1h
cCwgRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMo
SGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBI
YXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdyYXBwZXIgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CisgICAgc2hlZXRXcmFwcGVyU2V0LmFk
ZChzdHlsZVNoZWV0V3JhcHBlcik7CisgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1h
cCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NT
T01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdy
YXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNl
dCwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4gPiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLnNpemUoKTsgKytpKSB7
CkBAIC0yOTEyLDIxICsyOTIyLDIxIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KEhhc2hNYXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb2xsZWN0Q1NTT01XcmFw
cGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkp
OwogICAgIH0KLSAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBkb2N1bWVudC0+
cGFnZVVzZXJTaGVldCgpKTsKKyAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBz
aGVldFdyYXBwZXJTZXQsIGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpOwogfQogCiBDU1NTdHls
ZVJ1bGUqIENTU1N0eWxlU2VsZWN0b3I6OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0
b3IoU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlmIChtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLmlzRW1wdHkoKSkgewotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGRlZmF1bHRT
dHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcCwgcXVpcmtzU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIHN2Z1N0eWxlU2hlZXQpOwotICAg
ICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBt
YXRoTUxTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcCwgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOwotICAgICAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBmdWxsc2Ny
ZWVuU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxl
VG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRT
dHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNo
ZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3Jh
cHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKKyAg
ICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwg
bV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0KTsKKyAgICAgICAg
Y29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk7CisgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5
bGVTaGVldENTU09NV3JhcHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOwogCi0gICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGRvY3Vt
ZW50KCkpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRvY3VtZW50KCkpOwogICAg
IH0KICAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9u
IDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNzIFN0
eWxlUnVsZVJlZ2lvbjsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsKK2Ns
YXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgU3R5
bGVkRWxlbWVudDsKIGNsYXNzIFdlYktpdENTU0ZpbHRlclZhbHVlOwpAQCAtMTU2LDcgKzE1Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZp
cnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKICAgICAKICAgICAv
LyBGaW5kIHRoZSBpZHMgb3IgY2xhc3NlcyB0aGUgc2VsZWN0b3JzIG9uIGEgc3R5bGVzaGVldCBh
cmUgc2NvcGVkIHRvLiBUaGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgaW4gc3Vi
dHJlZXMgd2hlcmUgdGhlIHJvb3QgZWxlbWVudCBtYXRjaGVzIHRoZSBzY29wZS4KLSAgICBzdGF0
aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoQ1NTU3R5bGVTaGVldCos
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKKyAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNo
ZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpOwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CkBAIC0z
OTksNyArNDAwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUq
IHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKLSAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29s
bGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiA+KiwgUnVsZVNldCYgdXNlclN0eWxlKTsKKyAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29s
bGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwogCiAgICAgdm9pZCBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKIApAQCAtNDk2LDEzICs0OTcsMTQgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBDU1NTdHlsZUFwcGx5UHJvcGVydHkmIG1fYXBwbHlQcm9wZXJ0eTsKICAgICAKICAgICBIYXNo
TWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcDsKKyAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldDsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBib29s
IG1faGFzUGVuZGluZ1NoYWRlcnM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci0gICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IENT
U1N0eWxlU2hlZXQqKTsKKyAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5l
U2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDExMzg1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNzQsOSArNzQsMTEgQEAgc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBh
cgogfQogI2VuZGlmCiAKLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSogcGFyZW50
Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGJhc2VVUkwp
CitTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChOb2RlKiBwYXJlbnROb2Rl
LCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQorICAgIDogbV9vd25lck5vZGUocGFyZW50Tm9kZSkKICAgICAsIG1f
b3duZXJSdWxlKDApCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9m
aW5hbFVSTChmaW5hbFVSTCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2Fk
Q29tcGxldGVkKGZhbHNlKQogICAgICwgbV9jc3NQYXJzZXJNb2RlKENTU1F1aXJrc01vZGUpCkBA
IC04NywyNSArODksMjcgQEAgQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChOb2RlKiBwYXJl
bgogICAgIEFTU0VSVChpc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KHBhcmVudE5vZGUp
KTsKIH0KIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChTdHlsZVJ1bGVJbXBvcnQqIG93
bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCi0gICAgOiBTdHlsZVNoZWV0KGhyZWYsIGJhc2VVUkwpCitTdHlsZVNo
ZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVs
ZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IG1fb3duZXJOb2RlKDApCiAgICAgLCBtX293bmVyUnVs
ZShvd25lclJ1bGUpCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9m
aW5hbFVSTChmaW5hbFVSTCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2Fk
Q29tcGxldGVkKGZhbHNlKQogICAgICwgbV9jc3NQYXJzZXJNb2RlKChvd25lclJ1bGUgJiYgb3du
ZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0
KCktPmNzc1BhcnNlck1vZGUoKSA6IENTU1N0cmljdE1vZGUpCiAgICAgLCBtX2hhc1N5bnRhY3Rp
Y2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxz
ZSkKIHsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IG93bmVyUnVsZSA/IG93bmVy
UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBh
cmVudFNoZWV0ID0gb3duZXJSdWxlID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAw
OwogICAgIG1faXNVc2VyU3R5bGVTaGVldCA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmlz
VXNlclN0eWxlU2hlZXQoKSA6IGZhbHNlOwogfQogCi1DU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVT
aGVldCgpCitTdHlsZVNoZWV0SW50ZXJuYWw6On5TdHlsZVNoZWV0SW50ZXJuYWwoKQogewogICAg
IGNsZWFyUnVsZXMoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJzZXJBcHBlbmRSdWxl
KFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFs
OjpwYXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKIHsKICAg
ICBBU1NFUlQoIXJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSk7CiAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0
UnVsZSgpKSB7CkBAIC0xMTgsMjQgKzEyMiwyNCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnBhcnNl
ckFwcGVuZFJ1bGUoUGFzCiAgICAgbV9jaGlsZFJ1bGVzLmFwcGVuZChydWxlKTsKIH0KIAotUGFz
c1JlZlB0cjxDU1NSdWxlPiBDU1NTdHlsZVNoZWV0OjpjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXIodW5zaWduZWQgaW5kZXgpCitQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlU2hlZXRJbnRlcm5h
bDo6Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4LCBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRXcmFwcGVyKQogewotICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAg
ICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgY2hpbGRW
ZWN0b3JJbmRleCA9IGluZGV4OwogICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7CiAgICAgICAg
IGlmIChpbmRleCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIENTU0NoYXJzZXRSdWxlOjpjcmVh
dGUodGhpcywgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSk7CisgICAgICAgICAgICByZXR1cm4g
Q1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZShwYXJlbnRXcmFwcGVyLCBtX2VuY29kaW5nRnJvbUNoYXJz
ZXRSdWxlKTsKICAgICAgICAgLS1jaGlsZFZlY3RvckluZGV4OwogICAgIH0KICAgICBpZiAoY2hp
bGRWZWN0b3JJbmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9p
bXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOwor
ICAgICAgICByZXR1cm4gbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NT
T01XcmFwcGVyKHBhcmVudFdyYXBwZXIpOwogICAgIAogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0g
bV9pbXBvcnRSdWxlcy5zaXplKCk7Ci0gICAgcmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3Rv
ckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOworICAgIHJldHVybiBtX2NoaWxkUnVs
ZXNbY2hpbGRWZWN0b3JJbmRleF0tPmNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRXcmFwcGVyKTsK
IH0KIAotdW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFN0
eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUNvdW50KCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCByZXN1
bHQgPSAwOwogICAgIHJlc3VsdCArPSBoYXNDaGFyc2V0UnVsZSgpID8gMSA6IDA7CkBAIC0xNDQs
MzggKzE0OCwxMyBAQCB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjpsZW5ndGgoKSBjb25zdAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUNTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3RoKCk7Ci0gICAgaWYg
KGluZGV4ID49IHJ1bGVDb3VudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5ncm93KHJ1bGVDb3VudCk7Ci0gICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01X
cmFwcGVycy5zaXplKCkgPT0gcnVsZUNvdW50KTsKLQotICAgIFJlZlB0cjxDU1NSdWxlPiYgY3Nz
UnVsZSA9IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF07Ci0gICAgaWYgKCFjc3NSdWxl
KQotICAgICAgICBjc3NSdWxlID0gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKGluZGV4KTsK
LSAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVh
ckNoYXJzZXRSdWxlKCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjpjbGVhckNoYXJzZXRSdWxl
KCkKIHsKICAgICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gU3RyaW5nKCk7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJSdWxlcygpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6
Y2xlYXJSdWxlcygpCiB7Ci0gICAgLy8gRm9yIHN0eWxlIHJ1bGVzIG91dHNpZGUgdGhlIGRvY3Vt
ZW50LCAucGFyZW50U3R5bGVTaGVldCBjYW4gYmVjb21lIG51bGwgZXZlbiBpZiB0aGUgc3R5bGUg
cnVsZQotICAgIC8vIGlzIHN0aWxsIG9ic2VydmFibGUgZnJvbSBKYXZhU2NyaXB0LiBUaGlzIG1h
dGNoZXMgdGhlIGJlaGF2aW9yIG9mIC5wYXJlbnROb2RlIGZvciBub2RlcywgYnV0Ci0gICAgLy8g
aXQncyBub3QgaWRlYWwgYmVjYXVzZSBpdCBtYWtlcyB0aGUgQ1NTT00ncyBiZWhhdmlvciBkZXBl
bmQgb24gdGhlIHRpbWluZyBvZiBnYXJiYWdlIGNvbGxlY3Rpb24uCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQotICAgICAgICAgICAgbV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQYXJlbnRTdHlsZVNoZWV0KDApOwotICAgIH0KLSAg
ICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuY2xlYXIoKTsKLQogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCht
X2ltcG9ydFJ1bGVzLmF0KGkpLT5wYXJlbnRTdHlsZVNoZWV0KCkgPT0gdGhpcyk7CiAgICAgICAg
IG1faW1wb3J0UnVsZXNbaV0tPmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwpAQCAtMTg1LDQ1ICsx
NjQsMTYgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhclJ1bGVzKCkKICAgICBjbGVhckNoYXJz
ZXRSdWxlKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKK3ZvaWQgU3R5bGVTaGVldEludGVy
bmFsOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29k
aW5nKQogewogICAgIC8vIFBhcnNlciBlbmZvcmNlcyB0aGF0IHRoZXJlIGlzIGV2ZXIgb25seSBv
bmUgQGNoYXJzZXQuCiAgICAgQVNTRVJUKG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxs
KCkpOwogICAgIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUgPSBlbmNvZGluZzsgCiB9CiAKLVBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OnJ1bGVzKCkKLXsKLSAgICBLVVJM
IHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZmluZERvY3VtZW50
KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAv
LyBJRSBiZWhhdmlvci4KLSAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG5vbkNoYXJzZXRS
dWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICB1bnNpZ25lZCBydWxlQ291
bnQgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50OyAr
K2kpIHsKLSAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxl
LT5pc0NoYXJzZXRSdWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbm9uQ2hh
cnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vbkNo
YXJzZXRSdWxlcy5yZWxlYXNlKCk7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2Vy
dFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCitib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3JhcHBlckluc2VydFJ1bGUoUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBlYyA9
IDA7Ci0gICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpF
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIENTU1BhcnNlciBwKGNzc1BhcnNl
ck1vZGUoKSk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZSh0
aGlzLCBydWxlU3RyaW5nKTsKLQotICAgIGlmICghcnVsZSkgewotICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoaW5kZXggPD0gcnVs
ZUNvdW50KCkpOwogICAgIC8vIFBhcnNlcjo6cGFyc2VSdWxlIGRvZXNuJ3QgY3VycmVudGx5IGFs
bG93IEBjaGFyc2V0IHNvIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIGl0LgogICAgIEFTU0VS
VCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKICAgICAKQEAgLTIzMiw5OSArMTgyLDU4IEBAIHVu
c2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICBpZiAoaGFzQ2hhcnNl
dFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRleCA9PSAwKSB7CiAgICAgICAg
ICAgICAvLyBOb3RoaW5nIGNhbiBiZSBpbnNlcnRlZCBiZWZvcmUgQGNoYXJzZXQuCi0gICAgICAg
ICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRWZWN0
b3JJbmRleDsKICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9y
dFJ1bGVzLnNpemUoKSB8fCAoY2hpbGRWZWN0b3JJbmRleCA9PSBtX2ltcG9ydFJ1bGVzLnNpemUo
KSAmJiBydWxlLT5pc0ltcG9ydFJ1bGUoKSkpIHsKICAgICAgICAgLy8gSW5zZXJ0aW5nIG5vbi1p
bXBvcnQgcnVsZSBiZWZvcmUgQGltcG9ydCBpcyBub3QgYWxsb3dlZC4KLSAgICAgICAgaWYgKCFy
dWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXJ1
bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBt
X2ltcG9ydFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBzdGF0aWNfY2FzdDxTdHlsZVJ1
bGVJbXBvcnQqPihydWxlLmdldCgpKSk7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0
b3JJbmRleF0tPnJlcXVlc3RTdHlsZVNoZWV0KCk7Ci0gICAgICAgIGdvdG8gc3VjY2VzczsKKyAg
ICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmlu
Z2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCisgICAgICAgIHN0
eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBJ
bnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxlIGlzIG5vdCBhbGxv
d2VkLgotICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICBlYyA9IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChydWxl
LT5pc0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNoaWxkVmVjdG9y
SW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAgCi0gICAgbV9jaGlsZFJ1bGVzLmluc2Vy
dChjaGlsZFZlY3RvckluZGV4LCBydWxlLnJlbGVhc2UoKSk7CisgICAgbV9jaGlsZFJ1bGVzLmlu
c2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKICAgICAKLXN1Y2Nlc3M6Ci0gICAgaWYgKCFt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQotICAgICAgICBtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7Ci0KLSAgICAvLyBG
SVhNRTogU3R5bGVzaGVldCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBtZWFuaW5nZnVsbHkgYmVm
b3JlIHRoZSBpbXBvcnRlZCBzaGVldHMgYXJlIGxvYWRlZC4KICAgICBzdHlsZVNoZWV0Q2hhbmdl
ZCgpOwotICAgIHJldHVybiBpbmRleDsKLX0KLQotaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBz
dHlsZSArICIgfSIsIGluZGV4LCBlYyk7Ci0KLSAgICAvLyBBcyBwZXIgTWljcm9zb2Z0IGRvY3Vt
ZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCi0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgQ1NT
U3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBjb25zdCBTdHJpbmcm
IHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gYWRkUnVsZShzZWxlY3Rv
ciwgc3R5bGUsIGxlbmd0aCgpLCBlYyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKCkKK3ZvaWQgU3R5bGVTaGVl
dEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBLVVJM
IHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZmluZERvY3VtZW50
KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0KHRoaXMpKTsKLSAgICByZXR1
cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKLX0KKyAgICBBU1NFUlQoaW5kZXggPCBy
dWxlQ291bnQoKSk7CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7
Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgZWMgPSAwOwogICAgIHVuc2lnbmVkIGNoaWxkVmVjdG9ySW5kZXggPSBpbmRleDsK
ICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRl
eCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAgICAgICAgICBn
b3RvIHN1Y2Nlc3M7CisgICAgICAgICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKICAgICB9
CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1bGVzLnNpemUoKSkgewogICAg
ICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jbGVhclBhcmVudFN0eWxlU2hl
ZXQoKTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7Ci0g
ICAgICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKLQot
c3VjY2VzczoKLSAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVT
aGVldCgwKTsKLSAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7
Ci0gICAgfQotCiAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNo
ZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6YWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICh1cmkuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzNyw3ICsyNDYsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFkZE5hbWVzcGFj
ZShDU1NQYXJzCiAgICAgICAgIHAtPm1fZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBDU1NTdHlsZVNoZWV0OjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgpCitjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRJbnRl
cm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewog
ICAgIGlmIChwcmVmaXguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxsQXRvbTsgLy8gTm8g
bmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdv
bid0IG1hdGNoIGl0LgpAQCAtMzUwLDEyICsyNTksMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBD
U1NTdHlsZVNoZWV0OjpkZXRlcgogICAgIHJldHVybiBudWxsQXRvbTsgLy8gQXNzdW1lIHdlIHdv
bid0IG1hdGNoIGFueSBuYW1lc3BhY2VzLgogfQogCi1ib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
Citib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nICZzdHJp
bmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICByZXR1cm4gcGFyc2VTdHJp
bmdBdExpbmUoc3RyaW5nLCBjc3NQYXJzZXJNb2RlLCAwKTsKIH0KIAotYm9vbCBDU1NTdHlsZVNo
ZWV0OjpwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKQorYm9vbCBTdHlsZVNoZWV0SW50
ZXJuYWw6OnBhcnNlU3RyaW5nQXRMaW5lKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIGludCBzdGFydExpbmVOdW1iZXIpCiB7CiAgICAgc2V0Q1NTUGFy
c2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKICAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKTsK
QEAgLTM2Myw3ICsyNzIsNyBAQCBib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nQXRMaW5l
KGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5n
KCkKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjppc0xvYWRpbmcoKSBjb25zdAogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChtX2ltcG9ydFJ1bGVzW2ldLT5pc0xvYWRpbmcoKSkKQEAgLTM3Miw3ICsyODEsNyBA
QCBib29sIENTU1N0eWxlU2hlZXQ6OmlzTG9hZGluZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIENTU1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKK3ZvaWQgU3R5bGVTaGVldEludGVy
bmFsOjpjaGVja0xvYWRlZCgpCiB7CiAgICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1
cm47CkBAIC0zODAsOCArMjg5LDggQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgp
CiAgICAgLy8gQXZvaWQgfHRoaXN8IGJlaW5nIGRlbGV0ZWQgYnkgc2NyaXB0cyB0aGF0IHJ1biB2
aWEKICAgICAvLyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzKCkuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82NjIyMzAwPi4K
LSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcHJvdGVjdG9yKHRoaXMpOwotICAgIGlmIChDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQorICAgIFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBpZiAoU3R5bGVTaGVldElu
dGVybmFsKiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQogICAgICAgICBzdHlsZVNo
ZWV0LT5jaGVja0xvYWRlZCgpOwogCiAgICAgUmVmUHRyPE5vZGU+IG93bmVyID0gb3duZXJOb2Rl
KCk7CkBAIC0zOTQsNTAgKzMwMyw0MyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVk
KCkKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6bm90aWZ5TG9hZGVkU2hlZXQoY29u
c3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6
bm90aWZ5TG9hZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCiB7CiAg
ICAgQVNTRVJUKHNoZWV0KTsKICAgICBtX2RpZExvYWRFcnJvck9jY3VyIHw9IHNoZWV0LT5lcnJv
ck9jY3VycmVkKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3RhcnRMb2FkaW5nRHluYW1p
Y1NoZWV0KCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQoKQogewogICAgIGlmIChOb2RlKiBvd25lciA9IG93bmVyTm9kZSgpKQogICAgICAgICBvd25l
ci0+c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9CiAKLU5vZGUqIENTU1N0eWxlU2hlZXQ6
OmZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCkgY29uc3QKK05vZGUqIFN0eWxlU2hlZXRJbnRlcm5h
bDo6ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQ1NT
U3R5bGVTaGVldCogc2hlZXQgPSB0aGlzOyBzaGVldDsgc2hlZXQgPSBzaGVldC0+cGFyZW50U3R5
bGVTaGVldCgpKSB7CisgICAgZm9yIChjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0g
dGhpczsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAg
ICBpZiAoTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuIG93bmVyTm9kZTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLURvY3VtZW50KiBD
U1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1lbnQoKQorRG9jdW1lbnQqIFN0eWxlU2hlZXRJbnRlcm5h
bDo6ZmluZERvY3VtZW50KCkKIHsKICAgICBOb2RlKiBvd25lck5vZGUgPSBmaW5kU3R5bGVTaGVl
dE93bmVyTm9kZSgpOwogCiAgICAgcmV0dXJuIG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1l
bnQoKSA6IDA7CiB9Ci0gICAgCi1NZWRpYUxpc3QqIENTU1N0eWxlU2hlZXQ6Om1lZGlhKCkgY29u
c3QgCi17IAotICAgIGlmICghbV9tZWRpYVF1ZXJpZXMpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBtX21lZGlhUXVlcmllcy0+ZW5zdXJlTWVkaWFMaXN0KGNvbnN0X2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KHRoaXMpKTsKLX0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXRNZWRpYVF1ZXJp
ZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCit2b2lkIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6c2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWFRdWVyaWVzKQogewogICAgIG1fbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzOwogfQogCi12
b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKK3ZvaWQgU3R5bGVTaGVldElu
dGVybmFsOjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCogcm9vdFNo
ZWV0ID0gdGhpczsKLSAgICB3aGlsZSAoQ1NTU3R5bGVTaGVldCogcGFyZW50ID0gcm9vdFNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgU3R5bGVTaGVldEludGVybmFsKiByb290U2hlZXQg
PSB0aGlzOworICAgIHdoaWxlIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCA9IHJvb3RTaGVl
dC0+cGFyZW50U3R5bGVTaGVldCgpKQogICAgICAgICByb290U2hlZXQgPSBwYXJlbnQ7CiAKICAg
ICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBldmVyeXRoaW5nIHVwZGF0ZVN0eWxlU2Vs
ZWN0b3IgZG9lcywKQEAgLTQ0Nyw4ICszNDksMTkgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0Q2hhbmdlZCgpCiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudFRvVXBkYXRlID0gcm9v
dFNoZWV0LT5maW5kRG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnRUb1VwZGF0ZS0+c3R5bGVT
ZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CisgICAgCitLVVJMIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbmFsVVJMLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gbV9maW5hbFVSTDsKKyAgICBpZiAoU3R5bGVTaGVldEludGVy
bmFsKiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIHBh
cmVudFNoZWV0LT5iYXNlVVJMKCk7CisgICAgaWYgKCFtX293bmVyTm9kZSkKKyAgICAgICAgcmV0
dXJuIEtVUkwoKTsKKyAgICByZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCktPmJhc2VVUkwo
KTsKK30KIAotS1VSTCBDU1NTdHlsZVNoZWV0Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVy
bCkgY29uc3QKK0tVUkwgU3R5bGVTaGVldEludGVybmFsOjpjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwgd2hlbiBw
YXNzZWQgYSBudWxsIHN0cmluZy4KICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5nZSB0aGUg
S1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CkBAIC00NjEsMTMgKzM3NCwx
MyBAQCBLVVJMIENTU1N0eWxlU2hlZXQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0CiAgICAgcmV0dXJu
IEtVUkwoYmFzZVVSTCgpLCB1cmwsIGVuY29kaW5nKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0
OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKK3ZvaWQg
U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykKIHsKLSAgICBEZXF1ZTxDU1NTdHlsZVNoZWV0Kj4gc3R5bGVTaGVldFF1ZXVl
OworICAgIERlcXVlPFN0eWxlU2hlZXRJbnRlcm5hbCo+IHN0eWxlU2hlZXRRdWV1ZTsKICAgICBz
dHlsZVNoZWV0UXVldWUuYXBwZW5kKHRoaXMpOwogCiAgICAgd2hpbGUgKCFzdHlsZVNoZWV0UXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0UXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5
bGVTaGVldCA9IHN0eWxlU2hlZXRRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5tX2ltcG9ydFJ1bGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBzdHls
ZVNoZWV0LT5tX2ltcG9ydFJ1bGVzW2ldLmdldCgpOwpAQCAtNDg2LDI1ICszOTksMTU5IEBAIHZv
aWQgQ1NTU3R5bGVTaGVldDo6YWRkU3VicmVzb3VyY2VTdHlsZVUKICAgICB9CiB9CiAKLUNTU0lt
cG9ydFJ1bGUqIENTU1N0eWxlU2hlZXQ6OmVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJbXBv
cnQqIGltcG9ydFJ1bGUpCitTdHlsZVNoZWV0SW50ZXJuYWwqIFN0eWxlU2hlZXRJbnRlcm5hbDo6
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CiB7Ci0gICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICBpZiAobV9pbXBvcnRSdWxl
c1tpXSA9PSBpbXBvcnRSdWxlKQotICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbShpKSk7Ci0gICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpIDogMDsKIH0KIAotQ1NTSW1wb3J0UnVsZSogQ1NTU3R5bGVTaGVldDo6
b3duZXJSdWxlKCkgY29uc3QgCi17ICAKLSAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpID8g
cGFyZW50U3R5bGVTaGVldCgpLT5lbnN1cmVDU1NPTVdyYXBwZXIobV9vd25lclJ1bGUpIDogMDsg
CitDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiBzdHlsZVNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpCisgICAgOiBtX2ludGVy
bmFsKHN0eWxlU2hlZXQpCisgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX293bmVy
UnVsZShvd25lclJ1bGUpCit7CiB9CiAKLUNTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdAorQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQog
ewotICAgIEFTU0VSVChpc0NTU1N0eWxlU2hlZXQoKSk7Ci0gICAgcmV0dXJuIG1fb3duZXJSdWxl
ID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CisgICAgLy8gRm9yIHN0eWxl
IHJ1bGVzIG91dHNpZGUgdGhlIGRvY3VtZW50LCAucGFyZW50U3R5bGVTaGVldCBjYW4gYmVjb21l
IG51bGwgZXZlbiBpZiB0aGUgc3R5bGUgcnVsZQorICAgIC8vIGlzIHN0aWxsIG9ic2VydmFibGUg
ZnJvbSBKYXZhU2NyaXB0LiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIC5wYXJlbnROb2Rl
IGZvciBub2RlcywgYnV0CisgICAgLy8gaXQncyBub3QgaWRlYWwgYmVjYXVzZSBpdCBtYWtlcyB0
aGUgQ1NTT00ncyBiZWhhdmlvciBkZXBlbmQgb24gdGhlIHRpbWluZyBvZiBnYXJiYWdlIGNvbGxl
Y3Rpb24uCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
W2ldKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQYXJlbnRT
dHlsZVNoZWV0KDApOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxl
ZChib29sIGRpc2FibGVkKQoreyAKKyAgICBpZiAoZGlzYWJsZWQgPT0gbV9pc0Rpc2FibGVkKQor
ICAgICAgICByZXR1cm47CisgICAgbV9pc0Rpc2FibGVkID0gZGlzYWJsZWQ7IAorICAgIG1faW50
ZXJuYWwtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7Cit9CisKK3Vuc2lnbmVkIENTU1N0eWxlU2hlZXQ6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnJ1bGVDb3VudCgpOwor
fQorCitDU1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAg
IHVuc2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOworICAgIGlmIChpbmRleCA+PSBydWxlQ291
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5ncm93KHJ1bGVD
b3VudCk7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gcnVs
ZUNvdW50KTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnNbaW5kZXhdOworICAgIGlmICghY3NzUnVsZSkKKyAgICAgICAgY3NzUnVs
ZSA9IG1faW50ZXJuYWwtPmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcihpbmRleCwgdGhpcyk7
CisgICAgcmV0dXJuIGNzc1J1bGUuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IENTU1N0eWxlU2hlZXQ6OnJ1bGVzKCkKK3sKKyAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZp
bmFsVVJMKCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9pbnRlcm5hbC0+ZmluZERvY3Vt
ZW50KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAvLyBJRSBiZWhhdmlvci4KKyAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG5vbkNoYXJz
ZXRSdWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICB1bnNpZ25lZCBydWxl
Q291bnQgPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50
OyArK2kpIHsKKyAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChy
dWxlLT5pc0NoYXJzZXRSdWxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9u
Q2hhcnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsKKyAgICB9CisgICAgcmV0dXJuIG5v
bkNoYXJzZXRSdWxlcy5yZWxlYXNlKCk7Cit9CisKK3Vuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omlu
c2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0Vt
cHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2ludGVybmFsLT5y
dWxlQ291bnQoKSk7CisKKyAgICBlYyA9IDA7CisgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpIHsK
KyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIENTU1BhcnNlciBwKG1faW50ZXJuYWwtPmNzc1BhcnNlck1vZGUoKSk7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZShtX2ludGVybmFsLmdldCgpLCBydWxl
U3RyaW5nKTsKKworICAgIGlmICghcnVsZSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBib29sIHN1Y2Nlc3MgPSBtX2ludGVybmFsLT53
cmFwcGVySW5zZXJ0UnVsZShydWxlLCBpbmRleCk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAg
ICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
ICAgICAgICAKKyAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCisg
ICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NS
dWxlPigpKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVs
ZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJU
KG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLnNpemUoKSA9PSBtX2ludGVybmFsLT5ydWxlQ291bnQoKSk7CisKKyAgICBlYyA9IDA7
CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0
ZVJ1bGUoaW5kZXgpOworCisgICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVu
dFN0eWxlU2hlZXQoMCk7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUo
aW5kZXgpOworICAgIH0KK30KKworaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIg
fSIsIGluZGV4LCBlYyk7CisgICAgCisgICAgLy8gQXMgcGVyIE1pY3Jvc29mdCBkb2N1bWVudGF0
aW9uLCBhbHdheXMgcmV0dXJuIC0xLgorICAgIHJldHVybiAtMTsKK30KKworaW50IENTU1N0eWxl
U2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHls
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGFkZFJ1bGUoc2VsZWN0b3IsIHN0
eWxlLCBsZW5ndGgoKSwgZWMpOworfQorCisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0
eWxlU2hlZXQ6OmNzc1J1bGVzKCkKK3sKKyAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZpbmFs
VVJMKCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9pbnRlcm5hbC0+ZmluZERvY3VtZW50
KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0KHRoaXMpKTsKKyAgICByZXR1
cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKK30KKworTWVkaWFMaXN0KiBDU1NTdHls
ZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoreyAKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1lZGlhUXVl
cmllcygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bWVkaWFR
dWVyaWVzKCktPmVuc3VyZU1lZGlhTGlzdChjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlz
KSk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCAKK3sgCisgICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKSA6IDA7IAorfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRS
dWxlQ1NTT01XcmFwcGVycygpCit7CisgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmNsZWFy
KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24g
MTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNiArMzEsNyBAQCBj
bGFzcyBDU1NJbXBvcnRSdWxlOwogY2xhc3MgQ1NTUGFyc2VyOwogY2xhc3MgQ1NTUnVsZTsKIGNs
YXNzIENTU1J1bGVMaXN0OworY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIERvY3VtZW50OwpA
QCAtNDEsNTMgKzQyLDQxIEBAIHN0cnVjdCBDU1NOYW1lc3BhY2U7CiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7
CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0
SW50ZXJuYWw+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3Jl
YXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPigwKSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5n
KCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4oMCksIFN0cmluZygpLCBLVVJMKCksIFN0cmluZygp
KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShO
b2RlKiBvd25lck5vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiBjcmVhdGUoTm9kZSogb3duZXJOb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NTdHlsZVNoZWV0KG93bmVyTm9kZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJO
b2RlLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJpbmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKE5v
ZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmlu
YWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwg
Y2hhcnNldCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hlZXRJbnRlcm5h
bChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkpOwogICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0
KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFs
VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQo
b3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJSdWxlLCBvcmlnaW5hbFVS
TCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gY3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmlu
YWxVUkwpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBjcmVhdGVJ
bmxpbmUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIGZpbmFsVVJM
LnN0cmluZygpLCBmaW5hbFVSTCwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJOb2RlLCBmaW5hbFVSTC5zdHJpbmcoKSwgZmlu
YWxVUkwsIFN0cmluZygpKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q1NTU3R5bGVTaGVldCgp
OwotCi0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Qg
T1ZFUlJJREU7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwotICAg
IHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSUUgRXh0ZW5zaW9ucwotICAgIFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHJ1bGVzKCk7Ci0gICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
aW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgflN0eWxlU2hl
ZXRJbnRlcm5hbCgpOwogCiAgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKTsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCk7CiAKICAgICB2b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1v
ZGUpOworICAgIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9
IENTU1N0cmljdE1vZGUpOwogCiAgICAgYm9vbCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJp
bmcmLCBDU1NQYXJzZXJNb2RlLCBpbnQgc3RhcnRMaW5lTnVtYmVyKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBpc0xvYWRpbmcoKTsKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwogCiAgICAgdm9p
ZCBjaGVja0xvYWRlZCgpOwogICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CkBA
IC0xMTUsMzggKzEwNCw1MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyUnVsZXMoKTsKIAot
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQg
aW5kZXgpOwotCiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hhcnNldCBhbmQgQGltcG9ydC4K
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkUnVsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1
bGVzOyB9CiAKLSAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsK
LQogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxN
ZWRpYVF1ZXJ5U2V0Pik7CiAKICAgICB2b2lkIG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hl
ZENTU1N0eWxlU2hlZXQqKTsKICAgICAKLSAgICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVy
UnVsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0OworICAgIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJOb2RlOyB9CisgICAgdm9pZCBjbGVhck93bmVyTm9kZSgpIHsgbV9vd25lck5vZGUgPSAw
OyB9CisgICAgU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiBtX293
bmVyUnVsZTsgfQogICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsg
fQogICAgIAotICAgIENTU0ltcG9ydFJ1bGUqIGVuc3VyZUNTU09NV3JhcHBlcihTdHlsZVJ1bGVJ
bXBvcnQqKTsKKyAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRlZCB0
aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KKyAgICAvLyB0aGlzIHN0eWxlIHNoZWV0LiBU
aGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKKyAgICAv
LyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1ZSBm
b3Igc2VjdXJpdHkpLgorICAgIFN0cmluZyBvcmlnaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luYWxVUkw7IH0KKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxl
OyB9CisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0
aXRsZTsgfQorICAgIAorICAgIHZvaWQgc2V0RmluYWxVUkwoY29uc3QgS1VSTCYgZmluYWxVUkwp
IHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9CisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBj
b25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9CisgICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7CiAK
LXByaXZhdGU6Ci0gICAgQ1NTU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpOwotICAgIENTU1N0eWxlU2hlZXQoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0
IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpOworICAgIHVuc2lnbmVkIHJ1bGVDb3VudCgpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQg
aW5kZXgpOworICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0g
ICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQor
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKHVuc2ln
bmVkIGluZGV4LCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRXcmFwcGVyKTsKKworcHJpdmF0ZToKKyAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQpOwogICAgIAogICAgIHZvaWQgY2xlYXJDaGFyc2V0UnVsZSgpOwogICAgIGJvb2wgaGFz
Q2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVybiAhbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5p
c051bGwoKTsgfQogCi0gICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBjcmVhdGVDaGlsZFJ1bGVDU1NP
TVdyYXBwZXIodW5zaWduZWQgaW5kZXgpOwotCisgICAgTm9kZSogbV9vd25lck5vZGU7CiAgICAg
U3R5bGVSdWxlSW1wb3J0KiBtX293bmVyUnVsZTsKKworICAgIFN0cmluZyBtX29yaWdpbmFsVVJM
OworICAgIEtVUkwgbV9maW5hbFVSTDsKKyAgICBTdHJpbmcgbV90aXRsZTsKKwogICAgIFN0cmlu
ZyBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
SW1wb3J0PiA+IG1faW1wb3J0UnVsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+IG1fY2hpbGRSdWxlczsKQEAgLTE1OSw3ICsxNjMsNjIgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNVc2VyU3R5bGVTaGVldCA6IDE7CiAgICAgYm9vbCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlciA6IDE7CiAgICAgYm9vbCBtX2RpZExvYWRFcnJvck9jY3VyIDogMTsKK307CisK
K2NsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IHNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUgPSAwKSAKKyAgICB7IAor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyUnVs
ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNTU1N0eWxlU2hlZXQoKTsKKworICAgIHZpcnR1
YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRl
cm5hbC0+b3duZXJOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9pbnRlcm5hbC0+b3JpZ2luYWxVUkwoKTsgfSAgCisgICAgdmlydHVhbCBTdHJpbmcg
dGl0bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT50aXRsZSgpOyB9Cisg
ICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0Rp
c2FibGVkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wpIE9WRVJSSURFOwor
ICAgIAorICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVzKCk7CisgICAgdW5zaWdu
ZWQgaW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CisgICAgCisgICAgLy8gSUUgRXh0ZW5zaW9ucworICAgIFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IHJ1bGVzKCk7CisgICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
Y29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50
IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgCisgICAgLy8gRm9y
IENTU1J1bGVMaXN0LgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIENTU1J1bGUq
IGl0ZW0odW5zaWduZWQgaW5kZXgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2Rl
KCkgT1ZFUlJJREUgeyBtX2ludGVybmFsLT5jbGVhck93bmVyTm9kZSgpOyB9CisgICAgdmlydHVh
bCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293
bmVyUnVsZTsgfQorICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9pbnRlcm5hbC0+YmFzZVVSTCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGlu
ZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmlzTG9hZGluZygpOyB9Cisg
ICAgCisgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CisgICAg
dm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQo
KTsgfQorICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSB7IHJldHVybiBtX2ludGVybmFsLT5m
aW5kRG9jdW1lbnQoKTsgfQorICAgIAorICAgIHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzKCk7CisKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1
cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENTU1N0eWxlU2hlZXQoUGFz
c1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpOwor
CisgICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsg
fQorICAgIAorICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1faW50ZXJuYWw7CisgICAg
Ym9vbCBtX2lzRGlzYWJsZWQ7CiAKKyAgICBDU1NJbXBvcnRSdWxlKiBtX293bmVyUnVsZTsKICAg
ICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiBtX2NoaWxkUnVsZUNTU09NV3JhcHBl
cnM7CiAgICAgbXV0YWJsZSBPd25QdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3RDU1NPTVdyYXBw
ZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIENTU1ZhbHVlOjpUeXBlIENTU1ZhbHVlOjpjc3NWYWx1ZVR5cGUoKSAKICAgICBy
ZXR1cm4gQ1NTX0NVU1RPTTsKIH0KIAotdm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCit2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewog
ICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5
LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAko
cmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBDU1NTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogICAgIAogLy8gRklY
TUU6IFRoZSBjdXJyZW50IENTU1ZhbHVlIGFuZCBzdWJjbGFzc2VzIHNob3VsZCBiZSB0dXJuZWQg
aW50byBpbnRlcm5hbCB0eXBlcyAoU3R5bGVWYWx1ZSkuCiAvLyBUaGUgZmV3IHN1YnR5cGVzIHRo
YXQgYXJlIGFjdHVhbGx5IGV4cG9zZWQgaW4gQ1NTT00gY2FuIGJlIHNlZW4gaW4gdGhlIGNsb25l
Rm9yQ1NTT00oKSBmdW5jdGlvbi4KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBjbG9uZUZvckNTU09NKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVT
aGVldCopOworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogcHJvdGVjdGVkOgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsx
MzYsNyBAQCBTdHJpbmcgQ1NTVmFsdWVMaXN0OjpjdXN0b21Dc3NUZXh0KCkgY29uCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVz
b3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5
bGVTaGVldCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVM
aXN0LmgJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lk
IGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVT
aGVldEludGVybmFsKik7CiAgICAgCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNsb25l
Rm9yQ1NTT00oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAJ
KHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTVmFsdWVQbwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCitQYXNz
UmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNv
bnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KQogewogICAgIC8vIEp1c3Qgd2lwZSBvdXQgdGhlIGNhY2hlIGFuZCBzdGFydCByZWJ1
aWxkaW5nIGlmIGl0IGdldHMgdG9vIGJpZy4KICAgICBjb25zdCBpbnQgbWF4aW11bUZvbnRGYWNl
Q2FjaGVTaXplID0gMTI4OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMCArMzYsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q1NTVmFsdWVMaXN0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogCiBjbGFzcyBDU1NWYWx1
ZVBvb2wgewogcHVibGljOgotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjcmVhdGVGb250
RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHls
ZVNoZWV0KTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZhY2VWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNo
ZWV0KTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVGb250RmFtaWx5
VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxDU1NJbmhlcml0ZWRWYWx1ZT4g
Y3JlYXRlSW5oZXJpdGVkVmFsdWUoKSB7IHJldHVybiBtX2luaGVyaXRlZFZhbHVlOyB9CiAgICAg
UGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkg
eyByZXR1cm4gbV9pbXBsaWNpdEluaXRpYWxWYWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlz
aW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldAogI2VuZGlmCiAgICAgZWMgPSAwOwogICAg
IC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIG1fcHJvcGVy
dHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisgICAg
bV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgp
LT5pbnRlcm5hbCgpKTsKIAogICAgIGRpZE11dGF0ZSgpOwogI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnNldAogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlv
cml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CiAgICAgZWMgPSAw
OwotICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOworICAgIGJvb2wgY2hh
bmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBv
cnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCktPmludGVybmFsKCkpOwogICAgIGlmIChjaGFuZ2Vk
KSB7CiAgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBh
cnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5
LAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyOTY+LgpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXQKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKICNlbmRpZgogICAgIGVjID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3Bl
cnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0
U3R5bGVTaGVldCgpKTsKKyAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpLT5p
bnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICBkaWRNdXRhdGUoKTsKICNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTEzODUx
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTU3R5bGVTaGVldDsK
IGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlU2hl
ZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxp
Y2kKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7
CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVT
aGVldCogY29udGV4dFN0eWxlU2hlZXQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAg
Ly8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUg
cHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBudWxs
IHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBp
dCBqdXN0IHRoZSBzYW1lLgpAQCAtNTMxLDcgKzUzMSw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoQ1NTUHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlv
biwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit2b2lkIFN0eWxlUHJvcGVydHlT
ZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHls
ZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1fcHJvcGVydGllcy5j
bGVhcigpOwogICAgIENTU1BhcnNlciBwYXJzZXIoY3NzUGFyc2VyTW9kZSgpKTsKQEAgLTc5Myw3
ICs3OTMsNyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAg
fQogfQogCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkK
K3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mIHVybHMsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5oCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIEtVUkw7CiBj
bGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50
OwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5h
bDsKIAogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJv
cGVydHlTZXQ+IHsKIHB1YmxpYzoKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNQcm9wZXJ0eUltcGxpY2l0KENTU1Byb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgLy8gVGhlc2Ug
ZXhwYW5kIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGludG8gbXVsdGlwbGUgcHJvcGVydGllcy4KLSAg
ICBib29sIHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50ID0gZmFsc2UsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0g
MCk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRT
dHlsZVNoZWV0ID0gMCk7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVz
ZSBkbyBub3QuIEZJWE1FOiBUaGlzIGlzIHRvbyBtZXNzeSwgd2UgY2FuIGRvIGJldHRlci4KQEAg
LTc3LDcgKzc4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7CiAKLSAgICB2b2lkIHBhcnNlRGVj
bGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBj
b250ZXh0U3R5bGVTaGVldCk7CisgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmlu
ZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVl
dCk7CiAKICAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqLCBp
bnQgbnVtUHJvcGVydGllcyk7CiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQ
cm9wZXJ0eSYpOwpAQCAtOTEsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDU1NQYXJz
ZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkgeyBtX2Nzc1BhcnNlck1vZGUgPSBj
c3NQYXJzZXJNb2RlOyB9CiAgICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyTW9kZT4obV9jc3NQYXJzZXJNb2RlKTsgfQog
Ci0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCk7CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBj
b25zdDsKICAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9w
ZXJ0aWVzKCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM4
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDQ5ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXQuaCIKIAotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVTaGVldDo6U3R5bGVTaGVldChOb2RlKiBwYXJlbnRO
b2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAg
ICA6IG1fZGlzYWJsZWQoZmFsc2UpCi0gICAgLCBtX293bmVyTm9kZShwYXJlbnROb2RlKQotICAg
ICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwp
Ci17Ci19Ci0KLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVS
TCwgY29uc3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwg
bV9vd25lck5vZGUoMCkKLSAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBt
X2ZpbmFsVVJMKGZpbmFsVVJMKQotewotfQotCiBTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCiB7
CiB9CiAKLUtVUkwgU3R5bGVTaGVldDo6YmFzZVVSTCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Zp
bmFsVVJMLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9maW5hbFVSTDsKLSAgICBpZiAoU3R5
bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVy
biBwYXJlbnRTaGVldC0+YmFzZVVSTCgpOwotICAgIGlmICghbV9vd25lck5vZGUpCi0gICAgICAg
IHJldHVybiBLVVJMKCk7Ci0gICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCk7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkK
LXsKLSAgICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOwotICAgICBpZiAoaXNDU1NTdHlsZVNoZWV0
KCkpCi0gICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4odGhpcyktPnN0eWxlU2hl
ZXRDaGFuZ2VkKCk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzksNDggKzM5LDIxIEBAIGNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTdHkKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7CiAKLSAgICBib29sIGRp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJs
ZWQoYm9vbCk7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX293bmVy
Tm9kZTsgfQotICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJOb2RlID0gMDsgfQot
Ci0gICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldERpc2FibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9k
ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJM
IHRoYXQgc3RhcnRlZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KLSAgICAvLyB0aGlz
IHN0eWxlIHNoZWV0LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVj
aCBleGNlcHQKLSAgICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1
c2UgdGhpcyB2YWx1ZSBmb3Igc2VjdXJpdHkpLgotICAgIGNvbnN0IFN0cmluZyYgaHJlZigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KLQotICAgIHZvaWQgc2V0RmluYWxVUkwoY29u
c3QgS1VSTCYgZmluYWxVUkwpIHsgbV9maW5hbFVSTCA9IGZpbmFsVVJMOyB9Ci0gICAgY29uc3Qg
S1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVVJMOyB9Ci0KLSAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJUaXRsZTsgfQotICAgIHZvaWQg
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiBzKSB7IG1fc3RyVGl0bGUgPSBzOyB9CisgICAgdmlydHVh
bCBTdHJpbmcgaHJlZigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBpc0xvYWRpbmcoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IENTU1N0cmljdE1vZGUpID0gMDsKIAorICAgIHZp
cnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbGVhck93bmVyTm9kZSgpID0gMDsKKyAgICB2aXJ0dWFsIEtVUkwgYmFz
ZVVSTCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgS1VSTCBiYXNlVVJMKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBT
dHlsZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCk7Ci0gICAgU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtV
UkwmIGZpbmFsVVJMKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fZGlzYWJsZWQ7Ci0gICAgTm9k
ZSogbV9vd25lck5vZGU7Ci0gICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7Ci0gICAgS1VSTCBtX2Zp
bmFsVVJMOwotICAgIFN0cmluZyBtX3N0clRpdGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJl
dmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDggKzEwOSw5IEBAIHZvaWQgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6aW5zZXJ0UnVsZSgKIHsKICAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLnNpemUoKSA9PSBtX2tleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpLnNpemUoKSk7
CiAKLSAgICBDU1NQYXJzZXIgcChjc3NQYXJzZXJNb2RlKCkpOwotICAgIFJlZlB0cjxTdHlsZUtl
eWZyYW1lPiBrZXlmcmFtZSA9IHAucGFyc2VLZXlmcmFtZVJ1bGUocGFyZW50U3R5bGVTaGVldCgp
LCBydWxlVGV4dCk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxl
U2hlZXQoKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5p
bnRlcm5hbCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBDU1NTdHJpY3RNb2RlKTsKKyAgICBSZWZQdHI8
U3R5bGVLZXlmcmFtZT4ga2V5ZnJhbWUgPSBwYXJzZXIucGFyc2VLZXlmcmFtZVJ1bGUoc3R5bGVT
aGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlVGV4dCk7CiAgICAgaWYgKCFr
ZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsOSBA
QCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IERPTUltcGxlbWVudGF0CiB7CiAgICAgLy8gRklY
TUU6IFRpdGxlIHNob3VsZCBiZSBzZXQuCiAgICAgLy8gRklYTUU6IE1lZGlhIGNvdWxkIGhhdmUg
d3Jvbmcgc3ludGF4LCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBleGNlcHRp
b24uCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc2hlZXQgPSBTdHlsZVNoZWV0
SW50ZXJuYWw6OmNyZWF0ZSgpOwogICAgIHNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVy
eVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtZWRpYSkpOwotICAgIHJldHVy
biBzaGVldC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVl
dCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB2YWxpZFhNTE1JTUVUeXBlQ2hhcnMg
PSAiWzAtOWEtekEtWl9cXC0rfiEkXFxee318LiUnYCMmKl0iOyAvLyBwZXIgUkZDczogMzAyMywg
MjA0NQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vKQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0yNTU3LDcgKzI1NTcsNyBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAgICAgICAgbV9iYXNlVVJMID0gS1VSTCgpOwogCiAg
ICAgaWYgKG1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldC0+c2V0RmluYWxVUkwobV9i
YXNlVVJMKTsKKyAgICAgICAgbV9lbGVtU2hlZXQtPmludGVybmFsKCktPnNldEZpbmFsVVJMKG1f
YmFzZVVSTCk7CiAgICAgCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVy
KG9sZEJhc2VVUkwsIG1fYmFzZVVSTCkpIHsKICAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNo
YW5nZXMgYW55IHJlbGF0aXZlIHZpc2l0ZWQgbGlua3MuCkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBi
b29sIERvY3VtZW50OjpjYW5CZUFjY2Vzc2VkQnlFdmVyeUFuY2VzCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUNTU1N0eWxlU2hlZXQqIERvY3VtZW50OjpwYWdlVXNlclNoZWV0KCkKK1N0eWxlU2hl
ZXRJbnRlcm5hbCogRG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQoKQogewogICAgIGlmIChtX3BhZ2VV
c2VyU2hlZXQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CkBAIC0yNzAy
LDcgKzI3MDIsNyBAQCBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUg
aXQuCi0gICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRo
aXMsIHNldHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CisgICAgbV9wYWdlVXNl
clNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3Mo
KS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsKICAgICBtX3BhZ2VVc2VyU2hlZXQtPnNldElz
VXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAgICAgbV9wYWdlVXNlclNoZWV0LT5wYXJzZVN0cmluZyh1
c2VyU2hlZXRUZXh0LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAg
ICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKQEAgLTI3MjMsNyArMjcyMyw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQogICAgICAgICBzdHlsZVNlbGVjdG9y
Q2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0
Citjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogRG9jdW1lbnQ6OnBh
Z2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAogewogICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVl
dENhY2hlVmFsaWQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VHcm91cFVzZXJTaGVldHMuZ2V0KCk7
CkBAIC0yNzQ4LDExICsyNzQ4LDExIEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiogRG8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnModXJsKCksIHNoZWV0LT53aGl0ZWxp
c3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYXJzZWRTaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Kj4odGhpcyksIHNoZWV0LT51cmwo
KSk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBwYXJzZWRTaGVldCA9
IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPih0
aGlzKSwgc2hlZXQtPnVybCgpKTsKICAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5zZXRJc1VzZXJT
dHlsZVNoZWV0KHNoZWV0LT5sZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbCk7CiAgICAgICAg
ICAgICBwYXJzZWRTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpLCBzdHJpY3RUb0NT
U1BhcnNlck1vZGUoIWluUXVpcmtzTW9kZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcGFnZUdy
b3VwVXNlclNoZWV0cykKLSAgICAgICAgICAgICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KTsKKyAgICAgICAgICAg
ICAgICBtX3BhZ2VHcm91cFVzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRz
LT5hcHBlbmQocGFyc2VkU2hlZXQucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3
NzYsMTAgKzI3NzYsMTAgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0
cwogICAgICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gdXNlclNoZWV0KQordm9pZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8U3R5
bGVTaGVldEludGVybmFsPiB1c2VyU2hlZXQpCiB7CiAgICAgaWYgKCFtX3VzZXJTaGVldHMpCi0g
ICAgICAgIG1fdXNlclNoZWV0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4pOworICAgICAgICBtX3VzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4pOwogICAgIG1fdXNlclNoZWV0cy0+YXBwZW5kKHVz
ZXJTaGVldCk7CiAgICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSk7CiB9CkBAIC0yNzg3LDcgKzI3ODcsNyBAQCB2b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQo
UGFzc1JlZlB0cjxDCiBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsK
ICAgICBpZiAoIW1fZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1TaGVldCA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSh0
aGlzLCBtX2Jhc2VVUkwpKTsKICAgICByZXR1cm4gbV9lbGVtU2hlZXQuZ2V0KCk7CiB9CiAKQEAg
LTMzMTYsMTAgKzMzMTYsOCBAQCB2b2lkIERvY3VtZW50Ojpjb2xsZWN0QWN0aXZlU3R5bGVzaGVl
dHMoCiAgICAgfQogfQogCi1ib29sIERvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWly
ZXNTdHlsZVJlY2FsYyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0KQorYm9vbCBEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoU3R5bGVTaGVldEludGVybmFs
KiBzdHlsZXNoZWV0KQogewotICAgIGlmIChzdHlsZXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgLy8gU2VlIGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJl
IHNjb3BlZCB0byBzb21lIHNwZWNpZmljIGlkcyBvciBjbGFzc2VzLgogICAgIC8vIFRoZW4gdGVz
dCBpZiB3ZSBhY3R1YWxseSBoYXZlIGFueSBvZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9t
ZW50LgogICAgIC8vIEZJWE1FOiBFdmVuIHdlIGlmIHdlIGZpbmQgc29tZSwgd2UgY291bGQganVz
dCBpbnZhbGlkYXRlIHRob3NlIHN1YnRyZWVzIGluc3RlYWQgb2YgaW52YWxpZGF0aW5nIHRoZSBl
bnRpcmUgc3R5bGUuCkBAIC0zMzkxLDcgKzMzODksOSBAQCB2b2lkIERvY3VtZW50OjphbmFseXpl
U3R5bGVzaGVldENoYW5nZShTCiAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENv
dW50OyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKICAgICAgICAgaWYgKCFuZXdTdHls
ZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpKSkKKyAgICAgICAgaWYg
KG5ld1N0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpLT5pbnRlcm5hbCgp
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNh
bGMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTM4NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICsz
LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtMTI3LDYgKzEyNyw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3Mg
U3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlU2hlZXRM
aXN0OwogY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CkBAIC02MjMsMTYg
KzYyNCwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5OYXZpZ2F0ZShGcmFtZSogdGFyZ2V0RnJh
bWUpOwogICAgIGJvb2wgY2FuQmVBY2Nlc3NlZEJ5RXZlcnlBbmNlc3RvckZyYW1lKCk7CiAKLSAg
ICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7CisgICAgU3R5bGVTaGVldEludGVybmFs
KiBwYWdlVXNlclNoZWV0KCk7CiAgICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICB2
b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0OworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzKCkg
Y29uc3Q7CiAgICAgdm9pZCBjbGVhclBhZ2VHcm91cFVzZXJTaGVldHMoKTsKICAgICB2b2lkIHVw
ZGF0ZVBhZ2VHcm91cFVzZXJTaGVldHMoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
U2hlZXRzLmdldCgpOyB9Ci0gICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0PiB1c2VyU2hlZXQpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiA+KiBkb2N1bWVudFVzZXJTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTaGVl
dHMuZ2V0KCk7IH0KKyAgICB2b2lkIGFkZFVzZXJTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJ
bnRlcm5hbD4gdXNlclNoZWV0KTsKIAogICAgIENTU1N0eWxlU2hlZXQqIGVsZW1lbnRTaGVldCgp
OwogICAgIApAQCAtMTE4MSw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIHVw
ZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnKTsKICAgICB2b2lk
IGNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsK
LSAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxl
U2hlZXQqKTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxj
KFN0eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2Uo
U3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCBib29s
JiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIGRlbGV0ZUN1c3RvbUZvbnRz
KCk7CkBAIC0xMjU3LDkgKzEyNTgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNOb2Rlc1dp
dGhQbGFjZWhvbGRlclN0eWxlOwogCiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fZWxlbVNo
ZWV0OwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VVc2VyU2hlZXQ7Ci0gICAgbXV0
YWJsZSBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+ID4gbV9wYWdlR3JvdXBV
c2VyU2hlZXRzOwotICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gPiBt
X3VzZXJTaGVldHM7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbV9wYWdlVXNlclNo
ZWV0OworICAgIG11dGFibGUgT3duUHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hlZXRzOworICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0
eWxlU2hlZXRJbnRlcm5hbD4gPiA+IG1fdXNlclNoZWV0czsKICAgICBtdXRhYmxlIGJvb2wgbV9w
YWdlR3JvdXBVc2VyU2hlZXRDYWNoZVZhbGlkOwogCiAgICAgYm9vbCBtX3ByaW50aW5nOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lv
biAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVsZW1lbnRBdHRy
aWJ1dGVEYXRhLmgiCiAKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiU3R5
bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04Miw3ICs4Myw3IEBAIHZv
aWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnVwZGF0ZUlubGluZVMKICAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wtPnNldENTU1BhcnNlck1vZGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkp
KTsKICAgICB9Ci0gICAgbV9pbmxpbmVTdHlsZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgIG1faW5saW5lU3R5bGVE
ZWNsLT5wYXJzZURlY2xhcmF0aW9uKHRleHQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRT
aGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVz
dHJveUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMTEzODUxKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMSwxNSArMjExLDE2IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpz
ZXRDU1NTdHlsZVMKICAgICB9CiAKICAgICBBU1NFUlQobV9pc0NTUyk7Ci0gICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IG5ld1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYs
IGJhc2VVUkwsIGNoYXJzZXQpOwotICAgIG1fc2hlZXQgPSBuZXdTaGVldDsKKyAgICBSZWZQdHI8
U3R5bGVTaGVldEludGVybmFsPiBuZXdTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRl
KHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGUobmV3U2hlZXQpOwogICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGNyb3NzLW9y
aWdpbiBzZWN1cml0eSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgYXJlCiAgICAgLy8gZ2V0dGluZyB0
aGUgc2hlZXQgdGV4dCBpbiAic3RyaWN0IiBtb2RlLiBUaGlzIGVuZm9yY2VzIGEgdmFsaWQgQ1NT
IE1JTUUKICAgICAvLyB0eXBlLgotICAgIHBhcnNlU3R5bGVTaGVldChzaGVldC0+c2hlZXRUZXh0
KHRydWUpKTsKICAgICBuZXdTaGVldC0+c2V0VGl0bGUobV90aXRsZSk7CiAgICAgbmV3U2hlZXQt
PnNldE1lZGlhUXVlcmllcyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUobV9tZWRpYSkpOwotICAgIG5l
d1NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisgICAgbV9zaGVldC0+c2V0RGlzYWJs
ZWQobV9hbHRlcm5hdGUpOworCisgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQo
dHJ1ZSkpOwogfQogCiAjaWYgRU5BQkxFKFhTTFQpCkBAIC0yMzMsNyArMjM0LDExIEBAIHZvaWQg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRYU0xTdHlsZVMKIAogdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KQogewotICAgIG1f
c2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0LCBDU1NTdHJpY3RNb2RlKTsKKyAgICBpZiAobV9pc0NT
UykKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5p
bnRlcm5hbCgpLT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisgICAgZWxzZSBp
ZiAobV9pc1hTTCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KG1fc2hlZXQu
Z2V0KCkpLT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisKICAgICBpZiAobV9j
YWNoZWRTaGVldCkKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwog
ICAgIG1fY2FjaGVkU2hlZXQgPSAwOwpAQCAtMjQxLDcgKzI0Niw3IEBAIHZvaWQgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpwYXJzZVN0eWxlU2gKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKIAogICAg
IGlmIChtX2lzQ1NTKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obV9zaGVl
dC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihtX3NoZWV0LmdldCgpKS0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKICNpZiBFTkFC
TEUoWFNMVCkKICAgICBlbHNlIGlmIChtX2lzWFNMKQogICAgICAgICBzdGF0aWNfY2FzdDxYU0xT
dHlsZVNoZWV0Kj4obV9zaGVldC5nZXQoKSktPmNoZWNrTG9hZGVkKCk7CkBAIC0yNTMsOCArMjU4
LDggQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxlUwogICAgIEFTU0VS
VCghbV9jYWNoZWRTaGVldCk7CiAgICAgQVNTRVJUKCFtX2xvYWRpbmcpOwogICAgIG1fc2hlZXQg
PSBzaGVldDsKLSAgICBtX3NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKLSAgICBtX3NoZWV0LT5z
ZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisgICAgc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxl
KG1fdGl0bGUpOworICAgIHNoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CiB9CiAKIGJv
b2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQs
MTYgKzE2NCwxNyBAQCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAg
ICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSB8fCBwcmludEV2
YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
UGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAgICAg
ICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBk
b2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3Ry
aW5nQXRMaW5lKHRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpKSwgc3RhcnRMaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldE1lZGlh
UXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fc2hlZXQtPnNl
dFRpdGxlKGUtPnRpdGxlKCkpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5h
bD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKGUsIFN0cmluZygpLCBL
VVJMKCksIGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOworICAgICAgICAgICAgc3R5bGVTaGVl
dC0+cGFyc2VTdHJpbmdBdExpbmUodGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVu
dC0+aW5RdWlya3NNb2RlKCkpLCBzdGFydExpbmVOdW1iZXIpOworICAgICAgICAgICAgc3R5bGVT
aGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOworICAgICAgICAg
ICAgc3R5bGVTaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CisgICAgICAgICAgICBtX3NoZWV0
ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQpOwogICAgICAgICAgICAgbV9sb2Fk
aW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9zaGVldCkKLSAgICAg
ICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgbV9zaGVldC0+aW50ZXJuYWwoKS0+
Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM4NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJv
cGVyCiAKIGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQog
ewotICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJs
ZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5z
dXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRT
aGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgaW5saW5lU3R5
bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIGNoYW5nZXM7CkBAIC0yMjYsNyArMjI2LDcgQEAgYm9v
bCBTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVBybwogdm9pZCBTdHlsZWRFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNv
bnN0CiB7CiAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRl
RGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKLSAgICAgICAgaW5s
aW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1l
bnRTaGVldCgpKTsKKyAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIGF0dHJpYnV0ZU5hbWVTb3J0KGNvbnN0IHBhaXI8QXRvbWljU3RyaW5n
SW1wbCosIEF0b21pY1N0cmluZz4mIHAxLCBjb25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBB
dG9taWNTdHJpbmc+JiBwMikKQEAgLTMzMyw1ICszMzMsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50
OjphZGRQcm9wZXJ0eVRvQXR0cmlidQogewogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQorICAgIAor
dm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGZhbHNl
LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7Cit9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsx
MTMsNiBAQCBpbmxpbmUgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6CiAgICAgcmV0
dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6
IDA7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1
dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCB2YWx1ZSwgZmFsc2UsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKLX0KLQogfSAv
L25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxl
bWVudC5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xNzYsNyAr
MTc3LDcgQEAgdm9pZCBIVE1MRm9udEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvckF0dAogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9y
VG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlDb2xvciwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGZhY2VBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhY2VW
YWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSkpCisgICAgICAg
IGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFjZVZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlRm9udEZhY2VWYWx1ZShhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKS0+aW50ZXJuYWwoKSkpCiAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250RmFjZVZhbHVlLnJlbGVhc2UoKSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRl
KGF0dHIsIHN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHQKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
dGl0bGVBdHRyICYmIG1fc2hlZXQpCi0gICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRy
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7
CiAgICAgfQogfQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5h
bDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgYm9vbCBzdHJp
Y3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpOwogICAgIGJvb2wgZW5mb3Jj
ZU1JTUVUeXBlID0gc3RyaWN0UGFyc2luZzsKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAjZW5kaWYKIAogICAgIFN0cmluZyBzaGVl
dFRleHQgPSBzaGVldC0+c2hlZXRUZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUp
OwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJN
b2RlKHN0cmljdFBhcnNpbmcpKTsKKyAgICBzdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldFRl
eHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShzdHJpY3RQYXJzaW5nKSk7CiAKICAgICAvLyBJZiB3
ZSdyZSBsb2FkaW5nIGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4sIGFuZCB0aGUgTUlNRSB0eXBl
IGlzIG5vdAogICAgIC8vIHN0YW5kYXJkLCByZXF1aXJlIHRoZSBDU1MgdG8gYXQgbGVhc3Qgc3Rh
cnQgd2l0aCBhIHN5bnRhY3RpY2FsbHkKQEAgLTMxNiw4ICszMTYsOCBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGJhc2VVUkwpKQogICAgICAgICBjcm9zc09yaWdpbkNTUyA9
IHRydWU7CiAKLSAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1f
c2hlZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQotICAgICAgICBtX3NoZWV0
ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOwor
ICAgIGlmIChjcm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhc3R5bGVTaGVldC0+
aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCisgICAgICAgIHN0eWxlU2hlZXQgPSBT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsK
IAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAg
ICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgzNTA+LgpAQCAtMzI3LDIwICszMjcsMjAgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhl
IHNlY29uZCB0cmFpbGluZyBuZXdsaW5lLgogICAgICAgICBpZiAoYmFzZVVSTC5zdHJpbmcoKS5l
bmRzV2l0aChzbGFzaEtIVE1MRml4ZXNEb3RDc3MpICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYg
bWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVldFRleHQpCiAgICAg
ICAgICAgICAgICAgJiYgc2hlZXRUZXh0Lmxlbmd0aCgpID49IG1lZGlhV2lraUtIVE1MRml4ZXNT
dHlsZVNoZWV0Lmxlbmd0aCgpIC0gMSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPmxl
bmd0aCgpID09IDEpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAg
IG1fc2hlZXQtPmRlbGV0ZVJ1bGUoMCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlU2hl
ZXQtPnJ1bGVDb3VudCgpID09IDEpOworICAgICAgICAgICAgc3R5bGVTaGVldC0+Y2xlYXJSdWxl
cygpOwogICAgICAgICB9CiAgICAgfQorICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVh
dGUoc3R5bGVTaGVldCk7CiAKLSAgICBtX3NoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKKyAgICBz
dHlsZVNoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKIAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0
PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgo
bV9tZWRpYSk7Ci0gICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7
CisgICAgc3R5bGVTaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7CiAKICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBtX3NoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChzaGVl
dCk7Ci0gICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICBzdHlsZVNoZWV0LT5ub3RpZnlM
b2FkZWRTaGVldChzaGVldCk7CisgICAgc3R5bGVTaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAog
Ym9vbCBIVE1MTGlua0VsZW1lbnQ6OnN0eWxlU2hlZXRJc0xvYWRpbmcoKSBjb25zdApAQCAtMzQ5
LDcgKzM0OSw3IEBAIGJvb2wgSFRNTExpbmtFbGVtZW50OjpzdHlsZVNoZWV0SXNMb2FkaW4KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFtX3NoZWV0KQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fc2hlZXQtPmlzTG9hZGluZygpOworICAgIHJldHVybiBtX3NoZWV0
LT5pbnRlcm5hbCgpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6Omxp
bmtMb2FkZWQoKQpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHIKICAgICAKICAgICAvLyBXYWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUg
bGlua2VkLXRvIHN0eWxlc2hlZXQuCiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBjb25zdF9jYXN0PEhUTUxMaW5rRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBz
dHlsZVNoZWV0LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIHZv
aWQgSFRNTExpbmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQoUGVuZGluZ1NoZWV0VHlwZSB0eXBl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIFBhc3NSZWZQdHI8SFRNTFN0eWxlRWxlbWVu
dD4gSFRNTFN0eWxlRWwKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1f
c2hlZXQpCi0gICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAg
ICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJv
ckF0dHIpCkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dAogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMo
dXJscyk7CiAKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8
SFRNTFN0eWxlRWxlbWVudCo+KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+aW50ZXJu
YWwoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxl
RWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENT
U1J1bGUqIAogICAgICAgICAgICAgbWVkaWFMaXN0ID0gMDsKIAogICAgICAgICBpZiAocGFyZW50
U3R5bGVTaGVldCkgewotICAgICAgICAgICAgc291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVldC0+
ZmluYWxVUkwoKTsKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhcmVudFN0eWxlU2hlZXQtPmlu
dGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICBpZiAoc291cmNlVVJMLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1l
bnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkpOwogICAgICAgICB9
IGVsc2UKQEAgLTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4o
Q1NTUnVsZSogCiAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdHlsZVNoZWV0
LT5maW5kRG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRvYykKICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IGRvYy0+dXJsKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmZpbmFsVVJMKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVS
TCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxl
U2hlZXQtPmludGVybmFsKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogICAgICAgICAgICAgICAg
ICAgICBtZWRpYUFycmF5LT5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBzdHls
ZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtlZFNoZWV0IDogTWVkaWFM
aXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnMKICAgICAgICAgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUoKTsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENT
U1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIENTU1BhcnNlciBwOwotICAgICAg
ICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0
ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5
bGUtPnBhcmVudFN0eWxlU2hlZXQoKSk7CisgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1w
TXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFt
ZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5p
bnRlcm5hbCgpKTsKICAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3Bl
cnR5RGF0YSA9IHNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJv
cGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKQEAgLTY4OSw4ICs2ODksOCBAQCBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvCiAvLyBzdGF0aWMKIFN0cmlu
ZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0KQogewotICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQt
PmZpbmFsVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGFnZVN0eWxlU2hlZXQtPmZp
bmFsVVJMKCkuc3RyaW5nKCk7CisgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBw
YWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5zdHJpbmcoKTsKICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIH0KIApAQCAtNzE4LDggKzcxOCw5IEBAIFN0cmluZyBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpmaW5hbFVSTCgpIGMKIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgbV9wYWdlU3R5bGVT
aGVldC0+Y2xlYXJSdWxlcygpOwotICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRl
eHQsIG1fcGFnZVN0eWxlU2hlZXQtPmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVT
aGVldC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxlcygpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmlu
dGVybmFsKCktPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCkt
PmNzc1BhcnNlck1vZGUoKSk7CisgICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJDaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzKCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQo
KTsKICAgICBtX2luc3BlY3RvclN0eWxlcy5jbGVhcigpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hh
bmdlZCgpOwpAQCAtMTA4NywxNCArMTA4OCwxNCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmVuc3VyZVNvdXJjZURhCiAgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0
eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKTsK
ICAgICBDU1NQYXJzZXIgcDsKICAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CiAg
ICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+
dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKICAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6
U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpT
b3VyY2VEYXRhKSk7CiAKICAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QobmV3U3R5bGVTaGVldC5n
ZXQoKSk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKICAgICBjb2xsZWN0
RmxhdFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlUmFu
Z2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxl
UnVsZSgpKTsKQEAgLTE0MTQsNyArMTQxNSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjoKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFy
YXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcDsKLSAg
ICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwg
cmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBwLnBh
cnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxlVGV4dCwgcmVzdWx0
LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDExMzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaAogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYg
IW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5v
bmUgd2FzIGZvdW5kIGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmco
c3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGlu
ZyhzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4
dEVuY29kaW5nLmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4
dC50b1N0cmluZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2Rl
KHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFNWR1N0eWxlRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0CiAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0aXRsZUF0dHIpIHsKICAgICAgICAgaWYgKG1fc2hlZXQpCi0gICAgICAgICAgICBtX3No
ZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPmludGVy
bmFsKCktPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDExMzg1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRh
dGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNjksMTAgKzY5LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBj
b25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZU1vZGUgPSBDU1NTdHJpY3RN
b2RlKTsKKyAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VNb2RlID0gQ1NTU3RyaWN0TW9kZSk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlz
TG9hZGluZygpOworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2b2lk
IGNoZWNrTG9hZGVkKCk7CisgICAgCisgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7
IHJldHVybiBtX2ZpbmFsVVJMOyB9CiAKICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOwogICAg
IHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKTsKQEAgLTgwLDcgKzgyLDcg
QEAgcHVibGljOgogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwogCiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKTsKLSAgICBYU0xTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9
CisgICAgdmlydHVhbCBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCBzZXRQYXJlbnRT
dHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7CiAKICNpZiBVU0UoUVhNTFFVRVJZKQpA
QCAtOTUsMTIgKzk3LDI2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7
CiAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorICAg
IAorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sIGIpIE9WRVJS
SURFIHsgbV9pc0Rpc2FibGVkID0gYjsgfQorICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2RlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lck5vZGU7IH0KKyAgICB2aXJ0dWFsIFN0cmlu
ZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vcmlnaW5hbFVSTDsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZFUlJJREUgeyBtX293
bmVyTm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KIAogcHJpdmF0ZToKICAgICBYU0xTdHlsZVNoZWV0KE5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZp
bmFsVVJMLCBib29sIGVtYmVkZGVkKTsKICNpZiAhVVNFKFFYTUxRVUVSWSkKICAgICBYU0xTdHls
ZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBvcmlnaW5h
bFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwpOwogI2VuZGlmCisgICAgCisgICAgTm9kZSogbV9v
d25lck5vZGU7CisgICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFsVVJM
OworICAgIGJvb2wgbV9pc0Rpc2FibGVkOwogCiAgICAgVmVjdG9yPE93blB0cjxYU0xJbXBvcnRS
dWxlPiA+IG1fY2hpbGRyZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNo
ZWV0TGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXRMaWJ4c2x0LmNwcAkocmV2aXNpb24gMTEzODUxKQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgogICoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01NSw3ICs1NSwxMCBAQCBTT0ZUX0xJTksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0
UEksCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQo
WFNMSW1wb3J0UnVsZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29u
c3QgS1VSTCYgZmluYWxVUkwpCi0gICAgOiBTdHlsZVNoZWV0KHN0YXRpY19jYXN0PE5vZGUqPigw
KSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMKQorICAgIDogbV9vd25lck5vZGUoMCkKKyAgICAsIG1f
b3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQorICAg
ICwgbV9pc0Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9lbWJlZGRlZChmYWxzZSkKICAgICAsIG1f
cHJvY2Vzc2VkKGZhbHNlKSAvLyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQg
d2hlbiB0aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgogICAgICwgbV9z
dHlsZXNoZWV0RG9jKDApCkBAIC02NSw3ICs2OCwxMCBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHls
ZVNoZWV0KFhTTEltcG9ydFJ1CiB9CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9k
ZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmlu
YWxVUkwsICBib29sIGVtYmVkZGVkKQotICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBvcmln
aW5hbFVSTCwgZmluYWxVUkwpCisgICAgOiBtX293bmVyTm9kZShwYXJlbnROb2RlKQorICAgICwg
bV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisg
ICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQogICAg
ICwgbV9wcm9jZXNzZWQodHJ1ZSkgLy8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNz
ZWQuCiAgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKQEAgLTg1LDcgKzkxLDcgQEAgWFNMU3R5bGVT
aGVldDo6flhTTFN0eWxlU2hlZXQoKQogICAgIH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojpp
c0xvYWRpbmcoKQorYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChtX2NoaWxkcmVuLmF0KGkpLT5pc0xvYWRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCShyZXZpc2lvbiAxMTM4NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
MTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVl
dChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUs
IG9yaWdpbmFsVVJMLCBmaW5hbFVSTCkKKyAgICA6IG1fb3duZXJOb2RlKHBhcmVudE5vZGUpCisg
ICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwgbV9maW5hbFVSTChmaW5hbFVS
TCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKICAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQp
CiB7CiB9CkBAIC00Nyw3ICs1MCw3IEBAIFhTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KCkK
ICAgICB9CiB9CiAKLWJvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKK2Jvb2wgWFNMU3R5
bGVTaGVldDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IHJldHVybiBmYWxzZTsK
</data>
<flag name="review"
          id="141601"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136741</attachid>
            <date>2012-04-11 13:38:30 -0700</date>
            <delta_ts>2012-04-11 16:11:30 -0700</delta_ts>
            <desc>try to fix chromium build</desc>
            <filename>stylesheet-internal-21.patch</filename>
            <type>text/plain</type>
            <size>122503</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZCBPVkVSUklERSBhbm5vdGF0aW9ucyBmb3IgY2MgbGF5ZXIgdHlwZXMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHJldmlzaW9u
IDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBTdHJpbmcgQ1NTRm9udEZhY2VTcmNWYWx1
ZTo6Y3VzdG9tQ3NzVGV4CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDU1NGb250RmFj
ZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgY29uc3QgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3ZvaWQgQ1NTRm9udEZhY2VTcmNW
YWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNv
bnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAoIWlzTG9jYWwo
KSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgc3R5bGVTaGVldC0+Y29tcGxldGVV
UkwobV9yZXNvdXJjZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3Jj
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOwor
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25z
dCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQoRG9j
dW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNp
b24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUoQ1NTU3R5
bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVy
eVNldD4gbWVkaWEpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVSdWxlSW1wb3J0
OjpjcmVhdGUoU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwg
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUnVsZUltcG9ydChwYXJlbnQsIGhyZWYsIG1lZGlhKSk7CiB9CiAKLVN0eWxlUnVs
ZUltcG9ydDo6U3R5bGVSdWxlSW1wb3J0KENTU1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3Ry
aW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorU3R5bGVSdWxlSW1w
b3J0OjpTdHlsZVJ1bGVJbXBvcnQoU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnQsIGNvbnN0IFN0
cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKICAgICA6IFN0eWxl
UnVsZUJhc2UoSW1wb3J0LCAwKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudCkKICAg
ICAsIG1fc3R5bGVTaGVldENsaWVudCh0aGlzKQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFN0eWxl
UnVsZUltcG9ydDo6c2V0Q1NTU3R5bGVTaGVldChjCiB7CiAgICAgaWYgKG1fc3R5bGVTaGVldCkK
ICAgICAgICAgbV9zdHlsZVNoZWV0LT5jbGVhck93bmVyUnVsZSgpOwotICAgIG1fc3R5bGVTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsK
KyAgICBtX3N0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVm
LCBiYXNlVVJMLCBjaGFyc2V0KTsKIAogICAgIGJvb2wgY3Jvc3NPcmlnaW5DU1MgPSBmYWxzZTsK
ICAgICBib29sIHZhbGlkTUlNRVR5cGUgPSBmYWxzZTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBT
dHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAgICBjcm9zc09yaWdpbkNT
UyA9IHRydWU7CiAKICAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYg
IW1fc3R5bGVTaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCi0gICAgICAg
IG1fc3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJM
LCBjaGFyc2V0KTsKKyAgICAgICAgbV9zdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpj
cmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CiAKICAgICBpZiAoaXNTdHJpY3RQ
YXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAg
ICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgzNTA+LgpAQCAtOTgsOSArOTgsOCBAQCB2b2lkIFN0eWxlUnVsZUltcG9ydDo6c2V0
Q1NTU3R5bGVTaGVldChjCiAgICAgICAgIC8vIHdoaWxlIHRoZSBvdGhlciBsYWNrcyB0aGUgc2Vj
b25kIHRyYWlsaW5nIG5ld2xpbmUuCiAgICAgICAgIGlmIChiYXNlVVJMLnN0cmluZygpLmVuZHNX
aXRoKHNsYXNoS0hUTUxGaXhlc0RvdENzcykgJiYgIXNoZWV0VGV4dC5pc051bGwoKSAmJiBtZWRp
YVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5zdGFydHNXaXRoKHNoZWV0VGV4dCkKICAgICAgICAg
ICAgICAgICAmJiBzaGVldFRleHQubGVuZ3RoKCkgPj0gbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxl
U2hlZXQubGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdHlsZVNoZWV0LT5s
ZW5ndGgoKSA9PSAxKTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAg
ICBtX3N0eWxlU2hlZXQtPmRlbGV0ZVJ1bGUoMCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKG1f
c3R5bGVTaGVldC0+Y2hpbGRSdWxlcygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIG1fc3R5
bGVTaGVldC0+Y2xlYXJSdWxlcygpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzYsOCArMTM1
LDggQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RTdHlsZVNoZWV0KAogCiAgICAgLy8g
Q2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBh
IHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJM
LCB0aGVuIGp1c3QgYmFpbC4KLSAgICBDU1NTdHlsZVNoZWV0KiByb290U2hlZXQgPSBtX3BhcmVu
dFN0eWxlU2hlZXQ7Ci0gICAgZm9yIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IG1fcGFyZW50U3R5
bGVTaGVldDsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgeworICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OworICAg
IGZvciAoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsgc2hl
ZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyB3cm9uZyBpZiB0aGUgZmluYWxVUkwgd2FzIHVwZGF0ZWQgdmlhIGRvY3VtZW50
Ojp1cGRhdGVCYXNlVVJMLgogICAgICAgICBpZiAoYWJzSHJlZiA9PSBzaGVldC0+ZmluYWxVUkwo
KS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2Niw2ICsxNjUsMTIgQEAgQ1NT
SW1wb3J0UnVsZTo6Q1NTSW1wb3J0UnVsZShTdHlsZVJ1bGVJbQogewogfQogCitDU1NJbXBvcnRS
dWxlOjp+Q1NTSW1wb3J0UnVsZSgpCit7CisgICAgaWYgKG1fc3R5bGVTaGVldENTU09NV3JhcHBl
cikKKyAgICAgICAgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyLT5jbGVhck93bmVyUnVsZSgpOwor
fQorCiBNZWRpYUxpc3QqIENTU0ltcG9ydFJ1bGU6Om1lZGlhKCkKIHsKICAgICByZXR1cm4gbV9p
bXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKS0+ZW5zdXJlTWVkaWFMaXN0KHBhcmVudFN0eWxlU2hl
ZXQoKSk7CkBAIC0xODcsNCArMTkyLDE1IEBAIFN0cmluZyBDU1NJbXBvcnRSdWxlOjpjc3NUZXh0
KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKK0NTU1N0eWxlU2hl
ZXQqIENTU0ltcG9ydFJ1bGU6OnN0eWxlU2hlZXQoKSBjb25zdAoreyAKKyAgICBpZiAoIW1faW1w
b3J0UnVsZS0+c3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUobV9pbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIGNvbnN0
X2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHRoaXMpKTsKKyAgICByZXR1cm4gbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyLmdldCgpOyAKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMywx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xh
c3MgTWVkaWFMaXN0OwogY2xhc3MgTWVkaWFRdWVyeVNldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRl
cm5hbDsKIAogY2xhc3MgU3R5bGVSdWxlSW1wb3J0IDogcHVibGljIFN0eWxlUnVsZUJhc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gY3JlYXRlKENT
U1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlh
UXVlcnlTZXQ+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0
ZShTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+KTsKIAogICAgIH5TdHlsZVJ1bGVJbXBvcnQoKTsKICAgICAKLSAg
ICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRTdHlsZVNoZWV0OyB9CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCBjbGVhclBh
cmVudFN0eWxlU2hlZXQoKSB7IG1fcGFyZW50U3R5bGVTaGVldCA9IDA7IH0KIAogICAgIFN0cmlu
ZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9Ci0gICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldC5nZXQoKTsgfQorICAgIFN0
eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVl
dC5nZXQoKTsgfQogCiAgICAgLy8gTm90IHBhcnQgb2YgdGhlIENTU09NLgogICAgIGJvb2wgaXNM
b2FkaW5nKCkgY29uc3Q7CkBAIC03MCwxNSArNzEsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICBm
cmllbmQgY2xhc3MgSW1wb3J0ZWRTdHlsZVNoZWV0Q2xpZW50OwogCi0gICAgU3R5bGVSdWxlSW1w
b3J0KENTU1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRy
PE1lZGlhUXVlcnlTZXQ+KTsKKyAgICBTdHlsZVJ1bGVJbXBvcnQoU3R5bGVTaGVldEludGVybmFs
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CiAKLSAgICAvLyBGWElNRTogVGhpcyBuZWVkcyB0byBnbyBhd2F5LgotICAgIENTU1N0eWxlU2hl
ZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIG1fcGFyZW50
U3R5bGVTaGVldDsKIAogICAgIEltcG9ydGVkU3R5bGVTaGVldENsaWVudCBtX3N0eWxlU2hlZXRD
bGllbnQ7CiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4g
bV9tZWRpYVF1ZXJpZXM7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsK
KyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBtX3N0eWxlU2hlZXQ7CiAgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKICAgICBi
b29sIG1fbG9hZGluZzsKIH07CkBAIC04NiwxMCArODYsMTIgQEAgcHJpdmF0ZToKIGNsYXNzIENT
U0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTSW1wb3J0UnVsZT4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCogcnVsZSwgQ1NTU3R5
bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NJbXBvcnRSdWxlKHJ1bGUs
IHNoZWV0KSk7IH0KKyAgICAKKyAgICB+Q1NTSW1wb3J0UnVsZSgpOwogCiAgICAgU3RyaW5nIGhy
ZWYoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1bGUtPmhyZWYoKTsgfQogICAgIE1lZGlhTGlz
dCogbWVkaWEoKTsKLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCk7IH0KKyAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KCkgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIApAQCAt
OTcsNiArOTksOCBAQCBwcml2YXRlOgogICAgIENTU0ltcG9ydFJ1bGUoU3R5bGVSdWxlSW1wb3J0
KiwgQ1NTU3R5bGVTaGVldCopOwogCiAgICAgUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gbV9pbXBv
cnRSdWxlOworCisgICAgbXV0YWJsZSBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0
Q1NTT01XcmFwcGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykg
MjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDUsIDIwMDYsIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC01OCw4ICs1OCw5IEBAIHVuc2lnbmVkIENTU01lZGlhUnVsZTo6aW5zZXJ0UnVsZShjb25zdCAK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQ1NTUGFyc2VyIHAoY3NzUGFyc2VyTW9k
ZSgpKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbmV3UnVsZSA9IHAucGFyc2VSdWxlKHBh
cmVudFN0eWxlU2hlZXQoKSwgcnVsZVN0cmluZyk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0eWxlU2hl
ZXQgPyBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBDU1NTdHJpY3RN
b2RlKTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbmV3UnVsZSA9IHBhcnNlci5wYXJzZVJ1
bGUoc3R5bGVTaGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlU3RyaW5nKTsK
ICAgICBpZiAoIW5ld1J1bGUpIHsKICAgICAgICAgLy8gU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRo
ZSBzcGVjaWZpZWQgcnVsZSBoYXMgYSBzeW50YXggZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNl
cihjb25zdCBjaGFyKiAKICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIsIFN0eWxlUnVsZVJhbmdl
TWFwKiBydWxlUmFuZ2VNYXApCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAgbV9k
ZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFj
ZS4KQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHls
ZVNoZWV0CiAgICAgbV9ydWxlID0gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBD
U1NQYXJzZXI6OnBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6cGFyc2VSdWxlKFN0
eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIHNl
dFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBm
YWxzZTsKQEAgLTI3OSw3ICsyNzksNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6cGFyCiAgICAgcmV0dXJuIG1fcnVsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0
ICpzaGVldCwgY29uc3QgU3RyaW5nICZzdHJpbmcpCitQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+
IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCwg
Y29uc3QgU3RyaW5nICZzdHJpbmcpCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAg
c2V0dXBQYXJzZXIoIkAtd2Via2l0LWtleWZyYW1lLXJ1bGV7ICIsIHN0cmluZywgIn0gIik7CkBA
IC05MDksNyArOTA5LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoU3R5bGVQcm9w
ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcsIENTU1N0
eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENT
U1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIFJlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBkdW1teVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAg
ICAgaWYgKCFwYXJzZVZhbHVlKGR1bW15U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rm9udEZhbWls
eSwgc3RyaW5nLCBmYWxzZSwgQ1NTUXVpcmtzTW9kZSwgY29udGV4dFN0eWxlU2hlZXQpKQpAQCAt
OTE3LDcgKzkxNyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnMK
ICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NWYWx1ZUxpc3Q+KGR1bW15U3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7CiB9CiAKLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFu
dCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5
bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRl
Y2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0
SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIGlmIChwYXJzZVNpbXBsZUxlbmd0
aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY3NzUGFy
c2VyTW9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHkKICAgICByZXR1cm4gcGFyc2VyLnBh
cnNlVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250
ZXh0U3R5bGVTaGVldCk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJv
cGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNs
YXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CiAKQEAgLTEwMDcsNyArMTAw
Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYKIAogdm9pZCBD
U1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBk
b2MsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewotICAgIFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiBkdW1teVN0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKKyAg
ICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBkdW1teVN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0
SW50ZXJuYWw6OmNyZWF0ZShkb2MpOwogCiAgICAgc2V0U3R5bGVTaGVldChkdW1teVN0eWxlU2hl
ZXQuZ2V0KCkpOwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rv
ckxpc3Q7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rv
cihjb25zdCBTdHJpCiAgICAgQVNTRVJUKGR1bW15U3R5bGVTaGVldC0+aGFzT25lUmVmKCkpOwog
fQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURh
dGE+KiBzdHlsZVNvdXJjZURhdGEsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFy
YXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiog
c3R5bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQog
ewogICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAxNTsKQEAgLTEwOTksNyArMTA5OSw3
IEBAIHZvaWQgQ1NTUGFyc2VyOjpjbGVhclByb3BlcnRpZXMoKQogICAgIG1faGFzRm9udEZhY2VP
bmx5VmFsdWVzID0gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpzZXRTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChT
dHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgbV9zdHlsZVNoZWV0ID0gc3R5
bGVTaGVldDsKIH0KQEAgLTcyODIsNyArNzI4Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZs
b3dUaHJlYWQoY29uc3QgU3QKICAgICBBU1NFUlQoZG9jKTsKICAgICBBU1NFUlQoZG9jLT5jc3NS
ZWdpb25zRW5hYmxlZCgpKTsKIAotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBkdW1teVN0eWxl
U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBkdW1teVN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZShk
b2MpOwogICAgIHNldFN0eWxlU2hlZXQoZHVtbXlTdHlsZVNoZWV0LmdldCgpKTsKIAogICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3std2Via2l0LWZsb3ctaW50bzoiLCBmbG93TmFtZSwg
In0iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NiBAQCBjbGFzcyBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU7CiBjbGFzcyBDU1NQcmltaXRpdmVW
YWx1ZTsKIGNsYXNzIENTU1Byb3BlcnR5OwogY2xhc3MgQ1NTU2VsZWN0b3JMaXN0OwotY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xh
c3MgQ1NTV3JhcFNoYXBlOwpAQCAtNjIsNiArNjEsNyBAQCBjbGFzcyBTdHlsZVByb3BlcnR5U2hv
cnRoYW5kOwogY2xhc3MgU3R5bGVSdWxlQmFzZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsK
IGNsYXNzIFN0eWxlS2V5ZnJhbWU7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiBjbGFzcyBT
dHlsZWRFbGVtZW50OwogCiBjbGFzcyBDU1NQYXJzZXIgewpAQCAtNzAsMTUgKzcwLDE1IEBAIHB1
YmxpYzoKIAogICAgIH5DU1NQYXJzZXIoKTsKIAotICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHls
ZVNoZWV0KiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVs
ZVJhbmdlTWFwKiBydWxlUmFuZ2VNYXAgPSAwKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IHBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgUGFzc1Jl
ZlB0cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0
KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNl
ck1vZGUsIENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldElu
dGVybmFsKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVs
ZVJhbmdlTWFwKiA9IDApOworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxl
KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIFBhc3NSZWZQdHI8U3R5
bGVLZXlmcmFtZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0Kiwg
Q1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1v
ZGUsIFN0eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdC
QTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3Rh
dGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBE
b2N1bWVudCopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250
RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHls
ZVNoZWV0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZh
Y2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRT
dHlsZVNoZWV0KTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlk
UHJpbWl0aXZlKGludCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVj
bGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHls
ZVNvdXJjZURhdGE+KiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJv
b2wgcGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4qLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KTsKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25z
dCBTdHJpbmcmKTsKIAogICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSBjb25zdDsKQEAgLTI4
Niw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgQ1NTUGFyc2VyTW9kZSBtX2Nzc1BhcnNlck1vZGU7
CiAgICAgYm9vbCBtX2ltcG9ydGFudDsKICAgICBDU1NQcm9wZXJ0eUlEIG1faWQ7Ci0gICAgQ1NT
U3R5bGVTaGVldCogbV9zdHlsZVNoZWV0OworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogbV9zdHls
ZVNoZWV0OwogICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7CiAgICAgUmVmUHRyPFN0
eWxlS2V5ZnJhbWU+IG1fa2V5ZnJhbWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFR
dWVyeTsKQEAgLTM0NSw3ICszNDUsNyBAQCBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGRldGVj
dERhc2hUb2tlbihpbnQpOwogICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29s
KTsKIAotICAgIHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgdm9pZCBz
ZXRTdHlsZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCopOwogCiAgICAgaW5saW5lIGJvb2wgaW5T
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1N0cmljdE1v
ZGUgfHwgbV9jc3NQYXJzZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGU7IH0KICAgICBpbmxpbmUg
Ym9vbCBpblF1aXJrc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc1BhcnNlck1vZGUgPT0gQ1NT
UXVpcmtzTW9kZTsgfQpAQCAtMzYzLDcgKzM2Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0dl
bmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUqKSBjb25zdDsKICAgICBib29sIHBhcnNl
R2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOwog
Ci0gICAgYm9vbCBwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpOworICAgIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCog
Y29udGV4dFN0eWxlU2hlZXQpOwogCiAgICAgZW51bSBTaXplUGFyYW1ldGVyVHlwZSB7CiAgICAg
ICAgIE5vbmUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJ
KHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjAsNyArMTA2MCw3IEBAIFN0cmluZyBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgKICAgICByZXR1cm4gdGV4dDsKIH0KIAotdm9pZCBD
U1NQcmltaXRpdmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ByaW1p
dGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewogICAgIGlmIChtX3By
aW1pdGl2ZVVuaXRUeXBlID09IENTU19VUkkpCiAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIHN0eWxlU2hlZXQtPmNvbXBsZXRlVVJMKG1fdmFsdWUuc3RyaW5nKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
Miw3ICsyNzIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJu
IG1faXNRdWlya1ZhbHVlOyB9CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgYWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKIAogICAgIExlbmd0aCB2aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxMTM5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBTdHJpbmcgQ1NTUmVmbGVjdFZhbHVlOjpjdXN0b21Dc3NU
ZXh0KCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKG1fbWFzaykKICAgICAgICAgbV9tYXNrLT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0
eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKIHByaXZhdGU6CiAgICAgQ1NT
UmVmbGVjdFZhbHVlKENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IG1hc2spCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE1ICs2OSw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBXRUJLSVRf
UkVHSU9OX1JVTEU7IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBJTVBPUlRfUlVMRTsgfQogCi0gICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRSdWxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGFyZW50UnVsZSgpLT5jc3NQYXJzZXJNb2RlKCk7Ci0gICAgICAgIGlmIChwYXJlbnRT
dHlsZVNoZWV0KCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpLT5jc3NQ
YXJzZXJNb2RlKCk7Ci0gICAgICAgIHJldHVybiBDU1NTdHJpY3RNb2RlOwotICAgIH0KLQogICAg
IHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogICAg
IHsKICAgICAgICAgbV9wYXJlbnRJc1J1bGUgPSBmYWxzZTsKQEAgLTEwMiwxMyArOTMsNiBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgS1VSTCBiYXNlVVJMKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVu
dFN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFzZVVSTCgp
OwotICAgICAgICByZXR1cm4gS1VSTCgpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIENTU1J1
bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBUeXBlIHR5cGUpCiAgICAgICAgIDogbV9oYXNDYWNo
ZWRTZWxlY3RvclRleHQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Q1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVj
dG9yKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisgICAgdm9pZCBhZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
Q1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwogCiAgICAg
dm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0g
ZmFsc2UpOwogICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rvciwg
Ym9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKQEAgLTI4NSwxMyArMjg1LDEzIEBAIHN0YXRp
YyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0
eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIFJ1bGVTZXQq
IGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogZGVmYXVsdFN0eWxlU2hlZXQ7
Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogcXVpcmtzU3R5bGVTaGVldDsKLXN0YXRpYyBDU1NTdHls
ZVNoZWV0KiBzdmdTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hlZXQqIG1hdGhNTFN0eWxl
U2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci1z
dGF0aWMgQ1NTU3R5bGVTaGVldCogZnVsbHNjcmVlblN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVT
aGVldEludGVybmFsKiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0
SW50ZXJuYWwqIGRlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
cXVpcmtzU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hl
ZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Oworc3RhdGlj
IFN0eWxlU2hlZXRJbnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CitzdGF0aWMgU3R5
bGVTaGVldEludGVybmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKIAogUmVuZGVyU3R5bGUqIENT
U1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTM5OSw3ICszOTks
NyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAKICAgICAvLyBG
SVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEK
ICAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwot
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBhZ2VVc2Vy
U2hlZXQoKSkKKyAgICBpZiAoU3R5bGVTaGVldEludGVybmFsKiBwYWdlVXNlclNoZWV0ID0gZG9j
dW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkKICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQocGFnZVVzZXJTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICBhZGRBdXRob3JS
dWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5wYWdlR3JvdXBVc2Vy
U2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKICAgICBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RV
c2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5kb2N1bWVudFVzZXJTaGVldHMoKSwgKnRlbXBV
c2VyU3R5bGUpOwpAQCAtNDE4LDE0ICs0MTgsMTQgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3RvcihEb2N1bQogICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIGRvY3VtZW50
LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkK
K3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVz
RnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogdXNl
clNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQogewogICAgIGlmICghdXNlclNoZWV0cykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdXNlclNoZWV0cy0+c2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBj
b25zdCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7Cisg
ICAgICAgIGNvbnN0IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+JiBzaGVldCA9IHVzZXJTaGVl
dHMtPmF0KGkpOwogICAgICAgICBpZiAoc2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSkKICAgICAg
ICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVt
LCB0aGlzKTsKICAgICAgICAgZWxzZQpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKCkKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci1jb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTY29wZShj
b25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKK2NvbnN0IENvbnRhaW5lck5vZGUqIENTU1N0eWxl
U2VsZWN0b3I6OmRldGVybWluZVNjb3BlKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQp
CiB7CiAgICAgQVNTRVJUKHNoZWV0KTsKIApAQCAtNTA0LDE3ICs1MDQsMTggQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZQogICAgICAgICBpZiAoIXN0eWxlc2hlZXRz
W2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9
IGRldGVybWluZVNjb3BlKGNzc1NoZWV0KTsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgPSBkZXRlcm1pbmVTY29wZShzaGVldCk7CiAgICAgICAgIGlmIChzY29wZSkgewogICAg
ICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIGlm
ICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVl
dCk7CiAgICAgfQpAQCAtNjgwLDE0ICs2ODEsMTQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6Y2xlYXIoKQogICAgIHVzZXNMaW5rUnVsZXMgPSBmYWxzZTsKIH0KIAotc3RhdGlj
IENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKK3N0YXRpYyBT
dHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIHsKLSAg
ICBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpLmxlYWtSZWYo
KTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQorICAgIFN0eWxlU2hlZXRJbnRlcm5hbCog
c2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgLy8gbGVhayB0
aGUgc2hlZXQgb24gcHVycG9zZQogICAgIHNoZWV0LT5wYXJzZVN0cmluZyhzdHIpOwogICAgIHJl
dHVybiBzaGVldDsKIH0KIAotc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQorc3RhdGljIFN0eWxlU2hlZXRJbnRl
cm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUp
CiB7CiAgICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVycywgc2l6ZSkpOwog
fQpAQCAtMjIzNyw3ICsyMjM4LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lv
blNlbGVjdAogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxlU2hlZXQqIHN0eWxl
c2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpkZXRl
cm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNo
ZWV0LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykKIHsKICAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlz
TG9hZGluZygpKTsKIApAQCAtMjQ2Miw3ICsyNDYzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSZWdp
b25SdWxlKFN0eWxlUnVsZVJlZwogICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBw
ZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3Qo
KSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dEludGVybmFsKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NT
dHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkK
IHsKICAgICBBU1NFUlQoc2hlZXQpOwogCkBAIC0yOTAzLDcgKzI5MDQsMTYgQEAgc3RhdGljIHZv
aWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQg
Y29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVS
dWxlPiA+JiB3cmFwcGVyTWFwLCBEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMgdm9pZCBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+
ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3Jh
cHBlclNldCwgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5
bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzdHls
ZVNoZWV0V3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KTsKKyAgICBz
aGVldFdyYXBwZXJTZXQuYWRkKHN0eWxlU2hlZXRXcmFwcGVyKTsKKyAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENT
U1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNo
ZWV0cygpLT52ZWN0b3IoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVl
dHMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5MTIsMjEgKzI5MjIsMjEgQEAgc3RhdGljIHZvaWQgY29s
bGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihzdHlsZVNoZWV0KSk7CiAgICAgfQotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBw
ZXJNYXAsIGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpOworICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKHdyYXBwZXJNYXAsIHNoZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQo
KSk7CiB9CiAKIENTU1N0eWxlUnVsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZW5zdXJlRnVsbENTU09N
V3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIHNpbXBsZURlZmF1bHRTdHlsZVNo
ZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3Jh
cHBlck1hcCwgZGVmYXVsdFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBxdWlya3NTdHlsZVNoZWV0KTsKLSAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgc3Zn
U3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAsIG1hdGhNTFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdy
YXBwZXJNYXAsIGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgZGVmYXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQsIHF1aXJrc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0
eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHN2
Z1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRv
Q1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIG1hdGhNTFN0eWxl
U2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIG1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBmdWxsc2NyZWVuU3R5bGVT
aGVldCk7CiAKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgZG9jdW1lbnQoKSk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwg
ZG9jdW1lbnQoKSk7CiAgICAgfQogICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLmdldChydWxlKS5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBjbGFzcyBTdHlsZVJ1
bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOwogY2xhc3MgU3R5bGVTaGFkZXI7CiBjbGFz
cyBTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogY2xhc3MgU3R5bGVTaGVl
dExpc3Q7CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7
CkBAIC0xNTYsNyArMTU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVz
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYpOwogICAgIAogICAgIC8vIEZpbmQgdGhlIGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMg
b24gYSBzdHlsZXNoZWV0IGFyZSBzY29wZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0
byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhl
IHNjb3BlLgotICAgIHN0YXRpYyBib29sIGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3Bl
cyhDU1NTdHlsZVNoZWV0KiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOworICAgIHN0YXRpYyBib29s
IGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0SW50ZXJuYWwqLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVS
ZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKQEAgLTM5OSw3ICs0MDAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0
YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAotICAgIHZvaWQgYWRk
QXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOworICAgIHZvaWQgYWRk
QXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiosIFJ1bGVTZXQmIHVzZXJTdHlsZSk7CiAKICAgICB2
b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCkBAIC00OTYsMTMgKzQ5NywxNCBAQCBw
cml2YXRlOgogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5
OwogICAgIAogICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBt
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOworICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OwogCiAjaWYgRU5BQkxFKENTU19T
SEFERVJTKQogICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKLSAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJt
aW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHN0YXRpYyBjb25zdCBDb250YWlu
ZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4g
U2NvcGVkUnVsZVNldE1hcDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC03NCw5ICs3NCwxMSBAQCBzdGF0aWMgYm9vbCBpc0FjY2VwdGFi
bGVDU1NTdHlsZVNoZWV0UGFyCiB9CiAjZW5kaWYKIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVT
aGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJh
c2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9k
ZSwgaHJlZiwgYmFzZVVSTCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFs
KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBtX293bmVyTm9kZShwYXJl
bnROb2RlKQogICAgICwgbV9vd25lclJ1bGUoMCkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQogICAgICwgbV9jaGFyc2V0KGNoYXJz
ZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX2Nzc1BhcnNlck1vZGUo
Q1NTUXVpcmtzTW9kZSkKQEAgLTg3LDI1ICs4OSwyNyBAQCBDU1NTdHlsZVNoZWV0OjpDU1NTdHls
ZVNoZWV0KE5vZGUqIHBhcmVuCiAgICAgQVNTRVJUKGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQ
YXJlbnQocGFyZW50Tm9kZSkpOwogfQogCi1DU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFN0
eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwm
IGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IFN0eWxlU2hlZXQoaHJlZiwg
YmFzZVVSTCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVs
ZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIDogbV9vd25lck5vZGUoMCkK
ICAgICAsIG1fb3duZXJSdWxlKG93bmVyUnVsZSkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQogICAgICwgbV9jaGFyc2V0KGNoYXJz
ZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX2Nzc1BhcnNlck1vZGUo
KG93bmVyUnVsZSAmJiBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSkgPyBvd25lclJ1bGUt
PnBhcmVudFN0eWxlU2hlZXQoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSkKICAg
ICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKHRydWUpCiAgICAgLCBtX2RpZExv
YWRFcnJvck9jY3VyKGZhbHNlKQogewotICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0g
b3duZXJSdWxlID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOworICAgIFN0eWxl
U2hlZXRJbnRlcm5hbCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKSA6IDA7CiAgICAgbV9pc1VzZXJTdHlsZVNoZWV0ID0gcGFyZW50U2hlZXQg
PyBwYXJlbnRTaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpIDogZmFsc2U7CiB9CiAKLUNTU1N0eWxl
U2hlZXQ6On5DU1NTdHlsZVNoZWV0KCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6flN0eWxlU2hlZXRJ
bnRlcm5hbCgpCiB7CiAgICAgY2xlYXJSdWxlcygpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6
OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlKQordm9pZCBT
dHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBydWxlKQogewogICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKICAgICBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKQEAgLTExOCwyNCArMTIyLDI0IEBAIHZvaWQgQ1NT
U3R5bGVTaGVldDo6cGFyc2VyQXBwZW5kUnVsZShQYXMKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5k
KHJ1bGUpOwogfQogCi1QYXNzUmVmUHRyPENTU1J1bGU+IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUNo
aWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCkKK1Bhc3NSZWZQdHI8Q1NTUnVsZT4g
U3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQg
aW5kZXgsIENTU1N0eWxlU2hlZXQqIHBhcmVudFdyYXBwZXIpCiB7Ci0gICAgQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IHJ1bGVDb3VudCgpKTsKICAgICAKICAg
ICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0NoYXJzZXRS
dWxlKCkpIHsKICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICByZXR1cm4gQ1NT
Q2hhcnNldFJ1bGU6OmNyZWF0ZSh0aGlzLCBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlKTsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHBhcmVudFdyYXBwZXIsIG1f
ZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOwogICAgICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7CiAg
ICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NP
TVdyYXBwZXIodGhpcyk7CisgICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9y
SW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CiAgICAgCiAgICAgY2hp
bGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKLSAgICByZXR1cm4gbV9jaGls
ZFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIodGhpcyk7CisgICAg
cmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVy
KHBhcmVudFdyYXBwZXIpOwogfQogCi11bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjpsZW5ndGgoKSBj
b25zdAordW5zaWduZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKSBjb25zdAogewog
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgcmVzdWx0ICs9IGhhc0NoYXJzZXRSdWxlKCkg
PyAxIDogMDsKQEAgLTE0NCwzOCArMTQ4LDEzIEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omxl
bmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1NTUnVsZSogQ1NTU3R5bGVT
aGVldDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBs
ZW5ndGgoKTsKLSAgICBpZiAoaW5kZXggPj0gcnVsZUNvdW50KQotICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmdyb3cocnVsZUNvdW50KTsKLSAgICBBU1NFUlQo
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBydWxlQ291bnQpOwotCi0gICAgUmVm
UHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XTsK
LSAgICBpZiAoIWNzc1J1bGUpCi0gICAgICAgIGNzc1J1bGUgPSBjcmVhdGVDaGlsZFJ1bGVDU1NP
TVdyYXBwZXIoaW5kZXgpOwotICAgIHJldHVybiBjc3NSdWxlLmdldCgpOwotfQotCi12b2lkIENT
U1N0eWxlU2hlZXQ6OmNsZWFyQ2hhcnNldFJ1bGUoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6
OmNsZWFyQ2hhcnNldFJ1bGUoKQogewogICAgIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUgPSBT
dHJpbmcoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhclJ1bGVzKCkKK3ZvaWQgU3R5
bGVTaGVldEludGVybmFsOjpjbGVhclJ1bGVzKCkKIHsKLSAgICAvLyBGb3Igc3R5bGUgcnVsZXMg
b3V0c2lkZSB0aGUgZG9jdW1lbnQsIC5wYXJlbnRTdHlsZVNoZWV0IGNhbiBiZWNvbWUgbnVsbCBl
dmVuIGlmIHRoZSBzdHlsZSBydWxlCi0gICAgLy8gaXMgc3RpbGwgb2JzZXJ2YWJsZSBmcm9tIEph
dmFTY3JpcHQuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgLnBhcmVudE5vZGUgZm9yIG5v
ZGVzLCBidXQKLSAgICAvLyBpdCdzIG5vdCBpZGVhbCBiZWNhdXNlIGl0IG1ha2VzIHRoZSBDU1NP
TSdzIGJlaGF2aW9yIGRlcGVuZCBvbiB0aGUgdGltaW5nIG9mIGdhcmJhZ2UgY29sbGVjdGlvbi4K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCi0g
ICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0tPnNldFBhcmVudFN0eWxlU2hl
ZXQoMCk7Ci0gICAgfQotICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5jbGVhcigpOwotCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgQVNTRVJUKG1faW1wb3J0UnVsZXMuYXQoaSktPnBhcmVudFN0eWxlU2hlZXQoKSA9
PSB0aGlzKTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tpXS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0
KCk7CkBAIC0xODUsNDUgKzE2NCwxNiBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyUnVsZXMo
KQogICAgIGNsZWFyQ2hhcnNldFJ1bGUoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJz
ZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQordm9p
ZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7CiAgICAgLy8gUGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhl
cmUgaXMgZXZlciBvbmx5IG9uZSBAY2hhcnNldC4KICAgICBBU1NFUlQobV9lbmNvZGluZ0Zyb21D
aGFyc2V0UnVsZS5pc051bGwoKSk7CiAgICAgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSA9IGVu
Y29kaW5nOyAKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVs
ZXMoKQotewotICAgIEtVUkwgdXJsID0gZmluYWxVUkwoKTsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBmaW5kRG9jdW1lbnQoKTsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQg
JiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIC8vIElFIGJlaGF2aW9yLgotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxl
TGlzdD4gbm9uQ2hhcnNldFJ1bGVzID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAg
IHVuc2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlQ291bnQ7ICsraSkgewotICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsK
LSAgICAgICAgaWYgKHJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBub25DaGFyc2V0UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOwotICAgIH0K
LSAgICByZXR1cm4gbm9uQ2hhcnNldFJ1bGVzLnJlbGVhc2UoKTsKLX0KLQotdW5zaWduZWQgQ1NT
U3R5bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVk
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFw
cGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGlu
ZGV4KQogewotICAgIGVjID0gMDsKLSAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgQ1NT
UGFyc2VyIHAoY3NzUGFyc2VyTW9kZSgpKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVs
ZSA9IHAucGFyc2VSdWxlKHRoaXMsIHJ1bGVTdHJpbmcpOwotCi0gICAgaWYgKCFydWxlKSB7Ci0g
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFT
U0VSVChpbmRleCA8PSBydWxlQ291bnQoKSk7CiAgICAgLy8gUGFyc2VyOjpwYXJzZVJ1bGUgZG9l
c24ndCBjdXJyZW50bHkgYWxsb3cgQGNoYXJzZXQgc28gd2UgZG9uJ3QgbmVlZCB0byBkZWFsIHdp
dGggaXQuCiAgICAgQVNTRVJUKCFydWxlLT5pc0NoYXJzZXRSdWxlKCkpOwogICAgIApAQCAtMjMy
LDEwMCArMTgyLDU4IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QK
ICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRl
eCA9PSAwKSB7CiAgICAgICAgICAgICAvLyBOb3RoaW5nIGNhbiBiZSBpbnNlcnRlZCBiZWZvcmUg
QGNoYXJzZXQuCi0gICAgICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkVmVj
dG9ySW5kZXggPCBtX2ltcG9ydFJ1bGVzLnNpemUoKSB8fCAoY2hpbGRWZWN0b3JJbmRleCA9PSBt
X2ltcG9ydFJ1bGVzLnNpemUoKSAmJiBydWxlLT5pc0ltcG9ydFJ1bGUoKSkpIHsKICAgICAgICAg
Ly8gSW5zZXJ0aW5nIG5vbi1pbXBvcnQgcnVsZSBiZWZvcmUgQGltcG9ydCBpcyBub3QgYWxsb3dl
ZC4KLSAgICAgICAgaWYgKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICAgICAgZWMg
PSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtX2ltcG9ydFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPihydWxlLmdldCgpKSk7CiAgICAgICAgIG1faW1w
b3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPnJlcXVlc3RTdHlsZVNoZWV0KCk7Ci0gICAgICAg
IGdvdG8gc3VjY2VzczsKKyAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1
YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBs
b2FkZWQuCisgICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9y
dCBydWxlIGlzIG5vdCBhbGxvd2VkLgotICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewot
ICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQorICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAgCi0gICAg
bV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlLnJlbGVhc2UoKSk7Cisg
ICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKICAgICAKLXN1
Y2Nlc3M6Ci0gICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQotICAg
ICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVs
ZT4oKSk7Ci0KLSAgICAvLyBGSVhNRTogU3R5bGVzaGVldCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5n
ZSBtZWFuaW5nZnVsbHkgYmVmb3JlIHRoZSBpbXBvcnRlZCBzaGVldHMgYXJlIGxvYWRlZC4KICAg
ICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwotICAgIHJldHVybiBpbmRleDsKLX0KLQotaW50IENTU1N0
eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBz
dHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnNlcnRSdWxlKHNl
bGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIgfSIsIGluZGV4LCBlYyk7Ci0KLSAgICAvLyBBcyBw
ZXIgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCi0gICAgcmV0dXJu
IC0xOwotfQotCi1pbnQgQ1NTU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBjb25zdCBTdHJpbmcmIHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1
cm4gYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUsIGxlbmd0aCgpLCBlYyk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVz
KCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCkKIHsKLSAgICBLVVJMIHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZmluZERvY3VtZW50KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50
ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1f
cnVsZUxpc3RDU1NPTVdyYXBwZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0
KHRoaXMpKTsKLSAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKLX0KKyAg
ICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVs
ZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZWMgPSAwOwogICAgIHVuc2lnbmVkIGNoaWxkVmVj
dG9ySW5kZXggPSBpbmRleDsKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBp
ZiAoY2hpbGRWZWN0b3JJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxl
KCk7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAgICAgICBzdHlsZVNoZWV0Q2hh
bmdlZCgpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRW
ZWN0b3JJbmRleDsKICAgICB9CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1
bGVzLnNpemUoKSkgewogICAgICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5j
bGVhclBhcmVudFN0eWxlU2hlZXQoKTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5yZW1vdmUoY2hp
bGRWZWN0b3JJbmRleCk7Ci0gICAgICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgc3R5bGVTaGVl
dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4
IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGls
ZFZlY3RvckluZGV4KTsKLQotc3VjY2VzczoKLSAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
bmRleF0pCi0gICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdLT5zZXRQ
YXJlbnRTdHlsZVNoZWV0KDApOwotICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMucmVt
b3ZlKGluZGV4KTsKLSAgICB9Ci0KICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQogCi12b2lk
IENTU1N0eWxlU2hlZXQ6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKK3ZvaWQgU3R5bGVTaGVldElu
dGVybmFsOjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKHVyaS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDcgKzI0Niw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6
YWRkTmFtZXNwYWNlKENTU1BhcnMKICAgICAgICAgcC0+bV9kZWZhdWx0TmFtZXNwYWNlID0gdXJp
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVybWluZU5hbWVz
cGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgU3R5
bGVTaGVldEludGVybmFsOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgpCiB7CiAgICAgaWYgKHByZWZpeC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxB
dG9tOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVz
cGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCkBAIC0zNTEsMTIgKzI1OSwxMiBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVyCiAgICAgcmV0dXJuIG51bGxBdG9tOyAvLyBB
c3N1bWUgd2Ugd29uJ3QgbWF0Y2ggYW55IG5hbWVzcGFjZXMuCiB9CiAKLWJvb2wgQ1NTU3R5bGVT
aGVldDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZyhjb25zdCBT
dHJpbmcgJnN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIHJldHVy
biBwYXJzZVN0cmluZ0F0TGluZShzdHJpbmcsIGNzc1BhcnNlck1vZGUsIDApOwogfQogCi1ib29s
IENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nQXRMaW5lKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIGludCBzdGFydExpbmVOdW1iZXIpCitib29sIFN0
eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmdBdExpbmUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgaW50IHN0YXJ0TGluZU51bWJlcikKIHsKICAg
ICBzZXRDU1NQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwogICAgIENTU1BhcnNlciBwKGNzc1Bh
cnNlck1vZGUpOwpAQCAtMzY0LDcgKzI3Miw3IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6cGFyc2VT
dHJpbmdBdExpbmUoY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NTdHlsZVNoZWV0
Ojppc0xvYWRpbmcoKQorYm9vbCBTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZygpIGNvbnN0
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgaWYgKG1faW1wb3J0UnVsZXNbaV0tPmlzTG9hZGluZygpKQpAQCAtMzcz
LDcgKzI4MSw3IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQordm9pZCBTdHls
ZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKCkKIHsKICAgICBpZiAoaXNMb2FkaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM4MSw4ICsyODksOCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNo
ZWNrTG9hZGVkKCkKICAgICAvLyBBdm9pZCB8dGhpc3wgYmVpbmcgZGVsZXRlZCBieSBzY3JpcHRz
IHRoYXQgcnVuIHZpYQogICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNj
cmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzY2MjIzMDA+LgotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwcm90ZWN0b3IodGhpcyk7Ci0g
ICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCisg
ICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gcHJvdGVjdG9yKHRoaXMpOworICAgIGlmIChT
dHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCiAgICAg
ICAgIHN0eWxlU2hlZXQtPmNoZWNrTG9hZGVkKCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gb3duZXIg
PSBvd25lck5vZGUoKTsKQEAgLTM5NSw1MCArMzAzLDQzIEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6
Y2hlY2tMb2FkZWQoKQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0Ojpub3RpZnlMb2Fk
ZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBzaGVldCkKK3ZvaWQgU3R5bGVTaGVl
dEludGVybmFsOjpub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBz
aGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQpOwogICAgIG1fZGlkTG9hZEVycm9yT2NjdXIgfD0g
c2hlZXQtPmVycm9yT2NjdXJyZWQoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzdGFydExv
YWRpbmdEeW5hbWljU2hlZXQoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnN0YXJ0TG9hZGlu
Z0R5bmFtaWNTaGVldCgpCiB7CiAgICAgaWYgKE5vZGUqIG93bmVyID0gb3duZXJOb2RlKCkpCiAg
ICAgICAgIG93bmVyLT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAotTm9kZSogQ1NT
U3R5bGVTaGVldDo6ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKSBjb25zdAorTm9kZSogU3R5bGVT
aGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSgpIGNvbnN0CiB7Ci0gICAgZm9y
IChjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IHRoaXM7IHNoZWV0OyBzaGVldCA9IHNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKKyAgICBmb3IgKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5h
bCogc2hlZXQgPSB0aGlzOyBzaGVldDsgc2hlZXQgPSBzaGVldC0+cGFyZW50U3R5bGVTaGVldCgp
KSB7CiAgICAgICAgIGlmIChOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAot
RG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmZpbmREb2N1bWVudCgpCitEb2N1bWVudCogU3R5bGVT
aGVldEludGVybmFsOjpmaW5kRG9jdW1lbnQoKQogewogICAgIE5vZGUqIG93bmVyTm9kZSA9IGZp
bmRTdHlsZVNoZWV0T3duZXJOb2RlKCk7CiAKICAgICByZXR1cm4gb3duZXJOb2RlID8gb3duZXJO
b2RlLT5kb2N1bWVudCgpIDogMDsKIH0KLSAgICAKLU1lZGlhTGlzdCogQ1NTU3R5bGVTaGVldDo6
bWVkaWEoKSBjb25zdCAKLXsgCi0gICAgaWYgKCFtX21lZGlhUXVlcmllcykKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLT5lbnN1cmVNZWRpYUxpc3QoY29uc3Rf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4odGhpcykpOwotfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6OnNl
dE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKK3Zv
aWQgU3R5bGVTaGVldEludGVybmFsOjpzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1
ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCiB7CiAgICAgbV9tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJp
ZXM7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5nZWQoKQordm9pZCBT
dHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKIHsKLSAgICBDU1NTdHlsZVNo
ZWV0KiByb290U2hlZXQgPSB0aGlzOwotICAgIHdoaWxlIChDU1NTdHlsZVNoZWV0KiBwYXJlbnQg
PSByb290U2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHJvb3RTaGVldCA9IHRoaXM7CisgICAgd2hpbGUgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50
ID0gcm9vdFNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpCiAgICAgICAgIHJvb3RTaGVldCA9IHBh
cmVudDsKIAogICAgIC8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhpbmcgdXBk
YXRlU3R5bGVTZWxlY3RvciBkb2VzLApAQCAtNDQ4LDggKzM0OSwxOSBAQCB2b2lkIENTU1N0eWxl
U2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50VG9V
cGRhdGUgPSByb290U2hlZXQtPmZpbmREb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudFRvVXBk
YXRlLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KKyAgICAKK0tV
UkwgU3R5bGVTaGVldEludGVybmFsOjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlu
YWxVUkwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2ZpbmFsVVJMOworICAgIGlmIChTdHls
ZVNoZWV0SW50ZXJuYWwqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQorICAgICAg
ICByZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKKyAgICBpZiAoIW1fb3duZXJOb2RlKQor
ICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBtX293bmVyTm9kZS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpOworfQogCi1LVVJMIENTU1N0eWxlU2hlZXQ6OmNvbXBsZXRlVVJMKGNvbnN0
IFN0cmluZyYgdXJsKSBjb25zdAorS1VSTCBTdHlsZVNoZWV0SW50ZXJuYWw6OmNvbXBsZXRlVVJM
KGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogewogICAgIC8vIEFsd2F5cyByZXR1cm4gYSBudWxs
IFVSTCB3aGVuIHBhc3NlZCBhIG51bGwgc3RyaW5nLgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
Y2hhbmdlIHRoZSBLVVJMIGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KQEAgLTQ2
MiwxMyArMzc0LDEzIEBAIEtVUkwgQ1NTU3R5bGVTaGVldDo6Y29tcGxldGVVUkwoY29uc3QgU3QK
ICAgICByZXR1cm4gS1VSTChiYXNlVVJMKCksIHVybCwgZW5jb2RpbmcpOwogfQogCi12b2lkIENT
U1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1
cmxzKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiB1cmxzKQogewotICAgIERlcXVlPENTU1N0eWxlU2hlZXQqPiBzdHls
ZVNoZWV0UXVldWU7CisgICAgRGVxdWU8U3R5bGVTaGVldEludGVybmFsKj4gc3R5bGVTaGVldFF1
ZXVlOwogICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQodGhpcyk7CiAKICAgICB3aGlsZSAoIXN0
eWxlU2hlZXRRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgU3R5bGVTaGVldElu
dGVybmFsKiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VGaXJzdCgpOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPm1faW1wb3J0
UnVsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFN0eWxlUnVsZUltcG9ydCogaW1wb3J0
UnVsZSA9IHN0eWxlU2hlZXQtPm1faW1wb3J0UnVsZXNbaV0uZ2V0KCk7CkBAIC00ODcsMjUgKzM5
OSwxNjAgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjphZGRTdWJyZXNvdXJjZVN0eWxlVQogICAgIH0K
IH0KIAotQ1NTSW1wb3J0UnVsZSogQ1NTU3R5bGVTaGVldDo6ZW5zdXJlQ1NTT01XcmFwcGVyKFN0
eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSkKK1N0eWxlU2hlZXRJbnRlcm5hbCogU3R5bGVTaGVl
dEludGVybmFsOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKIHsKLSAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgIGlmICht
X2ltcG9ydFJ1bGVzW2ldID09IGltcG9ydFJ1bGUpCi0gICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKGkpKTsKLSAgICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3du
ZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwogfQogCi1DU1NJbXBvcnRSdWxlKiBDU1NT
dHlsZVNoZWV0Ojpvd25lclJ1bGUoKSBjb25zdCAKLXsgIAotICAgIHJldHVybiBwYXJlbnRTdHls
ZVNoZWV0KCkgPyBwYXJlbnRTdHlsZVNoZWV0KCktPmVuc3VyZUNTU09NV3JhcHBlcihtX293bmVy
UnVsZSkgOiAwOyAKK0NTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHls
ZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSkKKyAg
ICA6IG1faW50ZXJuYWwoc3R5bGVTaGVldCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKKyAg
ICAsIG1fb3duZXJSdWxlKG93bmVyUnVsZSkKK3sKIH0KIAotQ1NTU3R5bGVTaGVldCogQ1NTU3R5
bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CitDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5
bGVTaGVldCgpCiB7Ci0gICAgQVNTRVJUKGlzQ1NTU3R5bGVTaGVldCgpKTsKLSAgICByZXR1cm4g
bV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKKyAgICAv
LyBGb3Igc3R5bGUgcnVsZXMgb3V0c2lkZSB0aGUgZG9jdW1lbnQsIC5wYXJlbnRTdHlsZVNoZWV0
IGNhbiBiZWNvbWUgbnVsbCBldmVuIGlmIHRoZSBzdHlsZSBydWxlCisgICAgLy8gaXMgc3RpbGwg
b2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2Yg
LnBhcmVudE5vZGUgZm9yIG5vZGVzLCBidXQKKyAgICAvLyBpdCdzIG5vdCBpZGVhbCBiZWNhdXNl
IGl0IG1ha2VzIHRoZSBDU1NPTSdzIGJlaGF2aW9yIGRlcGVuZCBvbiB0aGUgdGltaW5nIG9mIGdh
cmJhZ2UgY29sbGVjdGlvbi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1
bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnNbaV0pCisgICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0t
PnNldFBhcmVudFN0eWxlU2hlZXQoMCk7CisgICAgfQorfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6
OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit7IAorICAgIGlmIChkaXNhYmxlZCA9PSBtX2lz
RGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzRGlzYWJsZWQgPSBkaXNhYmxlZDsg
CisgICAgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsKK30KKwordW5zaWduZWQgQ1NT
U3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+cnVs
ZUNvdW50KCk7Cit9CisKK0NTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWduZWQgaW5k
ZXgpCit7CisgICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3RoKCk7CisgICAgaWYgKGluZGV4
ID49IHJ1bGVDb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
Lmdyb3cocnVsZUNvdW50KTsKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNp
emUoKSA9PSBydWxlQ291bnQpOworICAgIAorICAgIFJlZlB0cjxDU1NSdWxlPiYgY3NzUnVsZSA9
IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF07CisgICAgaWYgKCFjc3NSdWxlKQorICAg
ICAgICBjc3NSdWxlID0gbV9pbnRlcm5hbC0+Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKGlu
ZGV4LCB0aGlzKTsKKyAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVsZXMoKQoreworICAgIEtVUkwgdXJsID0gbV9p
bnRlcm5hbC0+ZmluYWxVUkwoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ludGVybmFs
LT5maW5kRG9jdW1lbnQoKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYg
IWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIC8vIElFIGJlaGF2aW9yLgorICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlz
dD4gbm9uQ2hhcnNldFJ1bGVzID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgIHVu
c2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBydWxlQ291bnQ7ICsraSkgeworICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsKKyAg
ICAgICAgaWYgKHJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBub25DaGFyc2V0UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOworICAgIH0KKyAg
ICByZXR1cm4gbm9uQ2hhcnNldFJ1bGVzLnJlbGVhc2UoKTsKK30KKwordW5zaWduZWQgQ1NTU3R5
bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVkIGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1f
aW50ZXJuYWwtPnJ1bGVDb3VudCgpKTsKKworICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPiBs
ZW5ndGgoKSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgQ1NTUGFyc2VyIHAobV9pbnRlcm5hbC0+Y3NzUGFyc2VyTW9kZSgpKTsK
KyAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSA9IHAucGFyc2VSdWxlKG1faW50ZXJuYWwu
Z2V0KCksIHJ1bGVTdHJpbmcpOworCisgICAgaWYgKCFydWxlKSB7CisgICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGJvb2wgc3VjY2VzcyA9IG1f
aW50ZXJuYWwtPndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0gICAgICAgIAorICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmluc2VydChpbmRleCwg
UmVmUHRyPENTU1J1bGU+KCkpOworICAgIHJldHVybiBpbmRleDsKK30KKwordm9pZCBDU1NTdHls
ZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1faW50ZXJuYWwtPnJ1bGVDb3VudCgpKTsKKwor
ICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpIHsKKyAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ludGVybmFsLT53
cmFwcGVyRGVsZXRlUnVsZShpbmRleCk7CisKKyAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
bmRleF0pCisgICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdLT5zZXRQ
YXJlbnRTdHlsZVNoZWV0KDApOworICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMucmVt
b3ZlKGluZGV4KTsKKyAgICB9Cit9CisKK2ludCBDU1NTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsgc3R5bGUg
KyAiIH0iLCBpbmRleCwgZWMpOworICAgIAorICAgIC8vIEFzIHBlciBNaWNyb3NvZnQgZG9jdW1l
bnRhdGlvbiwgYWx3YXlzIHJldHVybiAtMS4KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBDU1NT
dHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYg
c3R5bGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBhZGRSdWxlKHNlbGVjdG9y
LCBzdHlsZSwgbGVuZ3RoKCksIGVjKTsKK30KKworCitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBD
U1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBtX2ludGVybmFsLT5m
aW5hbFVSTCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faW50ZXJuYWwtPmZpbmREb2N1
bWVudCgpOworICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFtX3J1bGVMaXN0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3J1bGVMaXN0Q1NTT01X
cmFwcGVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2hlZXRDU1NSdWxlTGlzdCh0aGlzKSk7CisgICAg
cmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7Cit9CisKK01lZGlhTGlzdCogQ1NT
U3R5bGVTaGVldDo6bWVkaWEoKSBjb25zdCAKK3sgCisgICAgaWYgKCFtX2ludGVybmFsLT5tZWRp
YVF1ZXJpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1l
ZGlhUXVlcmllcygpLT5lbnN1cmVNZWRpYUxpc3QoY29uc3RfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
dGhpcykpOworfQorCitDU1NTdHlsZVNoZWV0KiBDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCkgOiAwOyAKK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhckNo
aWxkUnVsZUNTU09NV3JhcHBlcnMoKQoreworICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5j
bGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDYgKzMxLDcg
QEAgY2xhc3MgQ1NTSW1wb3J0UnVsZTsKIGNsYXNzIENTU1BhcnNlcjsKIGNsYXNzIENTU1J1bGU7
CiBjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVu
dDsKQEAgLTQxLDUzICs0Miw0MSBAQCBzdHJ1Y3QgQ1NTTmFtZXNwYWNlOwogCiB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hl
ZXQgeworY2xhc3MgU3R5bGVTaGVldEludGVybmFsIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVT
aGVldEludGVybmFsPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+
IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hl
ZXQoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4oMCksIFN0cmluZygpLCBLVVJMKCksIFN0
cmluZygpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFs
KHN0YXRpY19jYXN0PFN0eWxlUnVsZUltcG9ydCo+KDApLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJp
bmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVh
dGUoTm9kZSogb3duZXJOb2RlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRl
cm5hbD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIFN0cmluZygpLCBLVVJMKCksIFN0cmlu
ZygpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93
bmVyTm9kZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKICAgICB9Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IGNyZWF0
ZShOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJOb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxV
UkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50
ZXJuYWwob3duZXJOb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKICAgICB9
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFN0eWxlUnVsZUlt
cG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBm
aW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNo
ZWV0KG93bmVyUnVsZSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMLCBjaGFyc2V0KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyUnVsZSwgb3JpZ2lu
YWxVUkwsIGZpbmFsVVJMLCBjaGFyc2V0KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IGNyZWF0ZUlubGluZShOb2RlKiBvd25lck5vZGUsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3Jl
YXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmluYWxVUkwpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJOb2RlLCBmaW5h
bFVSTC5zdHJpbmcoKSwgZmluYWxVUkwsIFN0cmluZygpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyTm9kZSwgZmluYWxVUkwuc3RyaW5nKCks
IGZpbmFsVVJMLCBTdHJpbmcoKSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU1N0eWxlU2hl
ZXQoKTsKLQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNv
bnN0IE9WRVJSSURFOwotCi0gICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZXMoKTsK
LSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5zaWduZWQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIElFIEV4dGVuc2lvbnMKLSAgICBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlcygpOwotICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5
bGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQorICAgIH5TdHls
ZVNoZWV0SW50ZXJuYWwoKTsKIAogICAgIHZvaWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciosIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgpOwogCiAgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogCi0gICAgdmlydHVh
bCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBDU1NTdHJp
Y3RNb2RlKTsKKyAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1v
ZGUgPSBDU1NTdHJpY3RNb2RlKTsKIAogICAgIGJvb2wgcGFyc2VTdHJpbmdBdExpbmUoY29uc3Qg
U3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSwgaW50IHN0YXJ0TGluZU51bWJlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkaW5nKCk7CisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKIAogICAg
IHZvaWQgY2hlY2tMb2FkZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgp
OwpAQCAtMTE1LDM4ICsxMDQsNTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhclJ1bGVzKCk7
CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBDU1NSdWxlKiBpdGVtKHVuc2ln
bmVkIGluZGV4KTsKLQogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBv
cnQuCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBv
cnRSdWxlczsgfQogCi0gICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgT1ZFUlJJ
REU7Ci0KICAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiBt
X21lZGlhUXVlcmllcy5nZXQoKTsgfQogICAgIHZvaWQgc2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQ
dHI8TWVkaWFRdWVyeVNldD4pOwogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBD
YWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgCi0gICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBv
d25lclJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVu
dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJldHVy
biBtX293bmVyTm9kZTsgfQorICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJOb2Rl
ID0gMDsgfQorICAgIFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lclJ1bGU7IH0KICAgICB2b2lkIGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVyUnVsZSA9
IDA7IH0KICAgICAKLSAgICBDU1NJbXBvcnRSdWxlKiBlbnN1cmVDU1NPTVdyYXBwZXIoU3R5bGVS
dWxlSW1wb3J0Kik7CisgICAgLy8gTm90ZSB0aGF0IGhyZWYgaXMgdGhlIFVSTCB0aGF0IHN0YXJ0
ZWQgdGhlIHJlZGlyZWN0IGNoYWluIHRoYXQgbGVkIHRvCisgICAgLy8gdGhpcyBzdHlsZSBzaGVl
dC4gVGhpcyBwcm9wZXJ0eSBwcm9iYWJseSBpc24ndCB1c2VmdWwgZm9yIG11Y2ggZXhjZXB0Cisg
ICAgLy8gdGhlIEphdmFTY3JpcHQgYmluZGluZyAod2hpY2ggbmVlZHMgdG8gdXNlIHRoaXMgdmFs
dWUgZm9yIHNlY3VyaXR5KS4KKyAgICBTdHJpbmcgb3JpZ2luYWxVUkwoKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbmFsVVJMOyB9CisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90
aXRsZTsgfQorICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxl
ID0gdGl0bGU7IH0KKyAgICAKKyAgICB2b2lkIHNldEZpbmFsVVJMKGNvbnN0IEtVUkwmIGZpbmFs
VVJMKSB7IG1fZmluYWxVUkwgPSBmaW5hbFVSTDsgfQorICAgIGNvbnN0IEtVUkwmIGZpbmFsVVJM
KCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFVSTDsgfQorICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0
OwogCi1wcml2YXRlOgotICAgIENTU1N0eWxlU2hlZXQoTm9kZSogb3duZXJOb2RlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KTsKLSAgICBDU1NTdHlsZVNoZWV0KFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBj
b25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KTsKKyAgICB1bnNpZ25lZCBydWxlQ291bnQoKSBjb25zdDsKKyAgICAKKyAg
ICBib29sIHdyYXBwZXJJbnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4sIHVuc2ln
bmVkIGluZGV4KTsKKyAgICB2b2lkIHdyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KTsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2NzcyI7
IH0KKyAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcih1
bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3JhcHBlcik7CisKK3ByaXZhdGU6
CisgICAgU3R5bGVTaGVldEludGVybmFsKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7
CisgICAgU3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KTsKICAgICAKICAgICB2b2lkIGNsZWFyQ2hhcnNldFJ1bGUoKTsKICAgICBib29s
IGhhc0NoYXJzZXRSdWxlKCkgY29uc3QgeyByZXR1cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1
bGUuaXNOdWxsKCk7IH0KIAotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxl
Q1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4KTsKLQorICAgIE5vZGUqIG1fb3duZXJOb2RlOwog
ICAgIFN0eWxlUnVsZUltcG9ydCogbV9vd25lclJ1bGU7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5h
bFVSTDsKKyAgICBLVVJMIG1fZmluYWxVUkw7CisgICAgU3RyaW5nIG1fdGl0bGU7CisKICAgICBT
dHJpbmcgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUltcG9ydD4gPiBtX2ltcG9ydFJ1bGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiBtX2NoaWxkUnVsZXM7CkBAIC0xNTksNyArMTYzLDYyIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOwogICAgIGJvb2wgbV9oYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIgOiAxOwogICAgIGJvb2wgbV9kaWRMb2FkRXJyb3JPY2N1ciA6IDE7Cit9
OworCitjbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFBhc3NSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBzaGVldCwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlID0gMCkgCisgICAg
eyAKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LCBvd25l
clJ1bGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DU1NTdHlsZVNoZWV0KCk7CisKKyAgICB2
aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aW50ZXJuYWwtPm93bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1faW50ZXJuYWwtPm9yaWdpbmFsVVJMKCk7IH0gIAorICAgIHZpcnR1YWwgU3Ry
aW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+dGl0bGUoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSBPVkVSUklE
RTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOworICAgIHVu
c2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIAorICAgIC8vIElFIEV4dGVuc2lvbnMKKyAgICBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBydWxlcygpOworICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IGRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQorICAgIAorICAgIC8v
IEZvciBDU1NSdWxlTGlzdC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBDU1NS
dWxlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVy
Tm9kZSgpIE9WRVJSSURFIHsgbV9pbnRlcm5hbC0+Y2xlYXJPd25lck5vZGUoKTsgfQorICAgIHZp
cnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9vd25lclJ1bGU7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1faW50ZXJuYWwtPmJhc2VVUkwoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xv
YWRpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5pc0xvYWRpbmcoKTsg
fQorICAgIAorICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQor
ICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IG1faW50ZXJuYWwtPnN0eWxlU2hlZXRDaGFu
Z2VkKCk7IH0KKyAgICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgeyByZXR1cm4gbV9pbnRlcm5h
bC0+ZmluZERvY3VtZW50KCk7IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NTT01X
cmFwcGVycygpOworCisgICAgU3R5bGVTaGVldEludGVybmFsKiBpbnRlcm5hbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW50ZXJuYWwuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDU1NTdHlsZVNoZWV0
KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxl
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2Nz
cyI7IH0KKyAgICAKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBtX2ludGVybmFsOwor
ICAgIGJvb2wgbV9pc0Rpc2FibGVkOwogCisgICAgQ1NTSW1wb3J0UnVsZSogbV9vd25lclJ1bGU7
CiAgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1J1bGU+ID4gbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzOwogICAgIG11dGFibGUgT3duUHRyPENTU1J1bGVMaXN0PiBtX3J1bGVMaXN0Q1NTT01X
cmFwcGVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNpb24gMTEzOTAy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBDU1NWYWx1ZTo6VHlwZSBDU1NWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgCiAg
ICAgcmV0dXJuIENTU19DVVNUT007CiB9CiAKLXZvaWQgQ1NTVmFsdWU6OmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KQordm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkK
IHsKICAgICAvLyBUaGlzIHNob3VsZCBnZXQgY2FsbGVkIGZvciBpbnRlcm5hbCBpbnN0YW5jZXMg
b25seS4KICAgICBBU1NFUlQoIWlzQ1NTT01TYWZlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
LmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKICAgICAKIC8v
IEZJWE1FOiBUaGUgY3VycmVudCBDU1NWYWx1ZSBhbmQgc3ViY2xhc3NlcyBzaG91bGQgYmUgdHVy
bmVkIGludG8gaW50ZXJuYWwgdHlwZXMgKFN0eWxlVmFsdWUpLgogLy8gVGhlIGZldyBzdWJ0eXBl
cyB0aGF0IGFyZSBhY3R1YWxseSBleHBvc2VkIGluIENTU09NIGNhbiBiZSBzZWVuIGluIHRoZSBj
bG9uZUZvckNTU09NKCkgZnVuY3Rpb24uCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogCiAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY2xvbmVGb3JDU1NPTSgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0
eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKIHByb3RlY3RlZDoKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NyArMTM2LDcgQEAgU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3VzdG9tQ3NzVGV4dCgpIGNvbgogICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zh
bHVlTGlzdC5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBj
bG9uZUZvckNTU09NKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBzdHJpbmcsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQor
UGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICAvLyBKdXN0IHdpcGUgb3V0IHRoZSBjYWNoZSBhbmQgc3RhcnQg
cmVidWlsZGluZyBpZiBpdCBnZXRzIHRvbyBiaWcuCiAgICAgY29uc3QgaW50IG1heGltdW1Gb250
RmFjZUNhY2hlU2l6ZSA9IDEyODsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBv
b2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmgJKHJl
dmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENTU1ZhbHVlTGlzdDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIAogY2xhc3MgQ1NT
VmFsdWVQb29sIHsKIHB1YmxpYzoKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRl
Rm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCk7CisgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNyZWF0ZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5
bGVTaGVldCk7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlRm9udEZh
bWlseVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Q1NTSW5oZXJpdGVkVmFs
dWU+IGNyZWF0ZUluaGVyaXRlZFZhbHVlKCkgeyByZXR1cm4gbV9pbmhlcml0ZWRWYWx1ZTsgfQog
ICAgIFBhc3NSZWZQdHI8Q1NTSW5pdGlhbFZhbHVlPiBjcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIG1faW1wbGljaXRJbml0aWFsVmFsdWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXQKICNlbmRpZgogICAgIGVjID0gMDsK
ICAgICAvLyBGSVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KLSAgICBtX3By
b3BlcnR5U2V0LT5wYXJzZURlY2xhcmF0aW9uKHRleHQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOwor
ICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hl
ZXQoKS0+aW50ZXJuYWwoKSk7CiAKICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpzZXQKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgaW1wb3J0YW50ID0g
cHJpb3JpdHkuZmluZCgiaW1wb3J0YW50IiwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOwogICAgIGVj
ID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKyAgICBib29s
IGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwg
aW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpLT5pbnRlcm5hbCgpKTsKICAgICBpZiAoY2hh
bmdlZCkgewogICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VSUiBv
ZiBwYXJzaW5nIGZhaWxlZCwgYnV0IHRoaXMgaXMgdG9vIGRhbmdlcm91cyBmb3IgY29tcGF0aWJp
bGl0eSwKICAgICAgICAgLy8gc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Mjk2Pi4KQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0CiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9u
U2NvcGUodGhpcyk7CiAjZW5kaWYKICAgICBlYyA9IDA7Ci0gICAgYm9vbCBjaGFuZ2VkID0gbV9w
cm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29u
dGV4dFN0eWxlU2hlZXQoKSk7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+c2V0
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQo
KS0+aW50ZXJuYWwoKSk7CiAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgZGlkTXV0YXRlKCk7
CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEx
MzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NQcm9wZXJ0eTsKLWNsYXNzIENTU1N0eWxlU2hl
ZXQ7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBTdHls
ZVNoZWV0SW50ZXJuYWw7CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogCiBjbGFzcyBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCShyZXZpc2lvbiAxMTM5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4NCw3ICs0ODQsNyBAQCBib29sIFN0eWxlUHJvcGVydHlTZXQ6OmlzUHJvcGVydHlJ
bXBsaWNpCiAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPmlzSW1wbGljaXQoKSA6IGZh
bHNlOwogfQogCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIENTU1N0
eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewog
ICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmluZyBqdXN0IHJlbW92ZXMg
dGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAgIC8vIFNldHRpbmcgaXQgdG8g
bnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1bHRzLCBidXQgd2UgdHJl
YXQgaXQganVzdCB0aGUgc2FtZS4KQEAgLTUzMSw3ICs1MzEsNyBAQCBib29sIFN0eWxlUHJvcGVy
dHlTZXQ6OnNldFByb3BlcnR5KENTU1ByCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5
bGVQcm9wZXJ0eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFy
YXRpb24sIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQordm9pZCBTdHlsZVByb3Bl
cnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwg
U3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBtX3Byb3BlcnRp
ZXMuY2xlYXIoKTsKICAgICBDU1NQYXJzZXIgcGFyc2VyKGNzc1BhcnNlck1vZGUoKSk7CkBAIC03
OTMsNyArNzkzLDcgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjptZXJnZShjb25zdCBTdHlsZQog
ICAgIH0KIH0KIAotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hl
ZXQpCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiB1cmxzLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0
KQogewogICAgIHNpemVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBLVVJM
OwogY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgU3R5bGVkRWxl
bWVudDsKIGNsYXNzIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQ7CitjbGFzcyBTdHlsZVNoZWV0SW50
ZXJuYWw7CiAKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHls
ZVByb3BlcnR5U2V0PiB7CiBwdWJsaWM6CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzUHJvcGVydHlJbXBsaWNpdChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKIAogICAgIC8vIFRo
ZXNlIGV4cGFuZCBzaG9ydGhhbmQgcHJvcGVydGllcyBpbnRvIG11bHRpcGxlIHByb3BlcnRpZXMu
Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVl
dCA9IDApOworICAgIGJvb2wgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgU3R5bGVTaGVldEludGVybmFsKiBjb250
ZXh0U3R5bGVTaGVldCA9IDApOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwogCiAgICAgLy8g
VGhlc2UgZG8gbm90LiBGSVhNRTogVGhpcyBpcyB0b28gbWVzc3ksIHdlIGNhbiBkbyBiZXR0ZXIu
CkBAIC03Nyw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIFN0cmluZyogcmV0dXJuVGV4dCA9IDApOwogCi0gICAgdm9pZCBwYXJz
ZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgQ1NTU3R5bGVTaGVl
dCogY29udGV4dFN0eWxlU2hlZXQpOworICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxl
U2hlZXQpOwogCiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5
KiwgaW50IG51bVByb3BlcnRpZXMpOwogICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydHkoY29uc3Qg
Q1NTUHJvcGVydHkmKTsKQEAgLTkxLDcgKzkyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q1NT
UGFyc2VyTW9kZShDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpIHsgbV9jc3NQYXJzZXJNb2Rl
ID0gY3NzUGFyc2VyTW9kZTsgfQogICAgIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENTU1BhcnNlck1vZGU+KG1fY3NzUGFyc2VyTW9kZSk7
IH0KIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgdm9pZCBhZGRTdWJyZXNv
dXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29u
dGV4dFN0eWxlU2hlZXQpOwogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5
KCkgY29uc3Q7CiAgICAgLy8gVXNlZCBieSBTdHlsZWRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRl
UHJvcGVydGllcygpLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmNwcAkocmV2aXNpb24g
MTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw0OSArMjAsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0LmgiCiAKLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoTm9kZSogcGFy
ZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwp
Ci0gICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9vd25lck5vZGUocGFyZW50Tm9kZSkK
LSAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBtX2ZpbmFsVVJMKGZpbmFs
VVJMKQotewotfQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMKQotICAgIDogbV9kaXNhYmxlZChmYWxzZSkKLSAg
ICAsIG1fb3duZXJOb2RlKDApCi0gICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQotICAg
ICwgbV9maW5hbFVSTChmaW5hbFVSTCkKLXsKLX0KLQogU3R5bGVTaGVldDo6flN0eWxlU2hlZXQo
KQogewogfQogCi1LVVJMIFN0eWxlU2hlZXQ6OmJhc2VVUkwoKSBjb25zdAotewotICAgIGlmICgh
bV9maW5hbFVSTC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG1fZmluYWxVUkw7Ci0gICAgaWYg
KFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICBy
ZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKLSAgICBpZiAoIW1fb3duZXJOb2RlKQotICAg
ICAgICByZXR1cm4gS1VSTCgpOwotICAgIHJldHVybiBtX293bmVyTm9kZS0+ZG9jdW1lbnQoKS0+
YmFzZVVSTCgpOwotfQotCi12b2lkIFN0eWxlU2hlZXQ6OnNldERpc2FibGVkKGJvb2wgZGlzYWJs
ZWQpCi17Ci0gICAgIG1fZGlzYWJsZWQgPSBkaXNhYmxlZDsKLSAgICAgaWYgKGlzQ1NTU3R5bGVT
aGVldCgpKQotICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHRoaXMpLT5zdHls
ZVNoZWV0Q2hhbmdlZCgpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHJl
dmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM5LDQ4ICszOSwyMSBAQCBjbGFzcyBTdHlsZVNoZWV0IDogcHVibGljIFJlZkNv
dW50ZWQ8U3R5CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3R5bGVTaGVldCgpOwogCi0gICAgYm9v
bCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERp
c2FibGVkKGJvb2wpOwotCi0gICAgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lck5vZGU7IH0KLSAgICB2b2lkIGNsZWFyT3duZXJOb2RlKCkgeyBtX293bmVyTm9kZSA9IDA7
IH0KLQotICAgIHZpcnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1
cm4gMDsgfQotCisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCBOb2RlKiBvd25l
ck5vZGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gTm90ZSB0aGF0IGhyZWYgaXMgdGhl
IFVSTCB0aGF0IHN0YXJ0ZWQgdGhlIHJlZGlyZWN0IGNoYWluIHRoYXQgbGVkIHRvCi0gICAgLy8g
dGhpcyBzdHlsZSBzaGVldC4gVGhpcyBwcm9wZXJ0eSBwcm9iYWJseSBpc24ndCB1c2VmdWwgZm9y
IG11Y2ggZXhjZXB0Ci0gICAgLy8gdGhlIEphdmFTY3JpcHQgYmluZGluZyAod2hpY2ggbmVlZHMg
dG8gdXNlIHRoaXMgdmFsdWUgZm9yIHNlY3VyaXR5KS4KLSAgICBjb25zdCBTdHJpbmcmIGhyZWYo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsVVJMOyB9Ci0KLSAgICB2b2lkIHNldEZpbmFsVVJM
KGNvbnN0IEtVUkwmIGZpbmFsVVJMKSB7IG1fZmluYWxVUkwgPSBmaW5hbFVSTDsgfQotICAgIGNv
bnN0IEtVUkwmIGZpbmFsVVJMKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFVSTDsgfQotCi0gICAg
Y29uc3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyVGl0bGU7IH0KLSAgICB2
b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgcykgeyBtX3N0clRpdGxlID0gczsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIGhyZWYoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgeyByZXR1
cm4gMDsgfQotCiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkaW5nKCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5n
KGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBDU1NTdHJpY3RNb2RlKSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPd25lck5vZGUoKSA9IDA7CisgICAgdmlydHVhbCBLVVJM
IGJhc2VVUkwoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3Qg
S1VSTCYgZmluYWxVUkwpOwotICAgIFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25z
dCBLVVJMJiBmaW5hbFVSTCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2Rpc2FibGVkOwotICAg
IE5vZGUqIG1fb3duZXJOb2RlOwotICAgIFN0cmluZyBtX29yaWdpbmFsVVJMOwotICAgIEtVUkwg
bV9maW5hbFVSTDsKLSAgICBTdHJpbmcgbV9zdHJUaXRsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3Bw
CShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw4ICsxMDksOSBAQCB2b2lkIFdlYktp
dENTU0tleWZyYW1lc1J1bGU6Omluc2VydFJ1bGUoCiB7CiAgICAgQVNTRVJUKG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVycy5zaXplKCkgPT0gbV9rZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKS5zaXpl
KCkpOwogCi0gICAgQ1NTUGFyc2VyIHAoY3NzUGFyc2VyTW9kZSgpKTsKLSAgICBSZWZQdHI8U3R5
bGVLZXlmcmFtZT4ga2V5ZnJhbWUgPSBwLnBhcnNlS2V5ZnJhbWVSdWxlKHBhcmVudFN0eWxlU2hl
ZXQoKSwgcnVsZVRleHQpOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRT
dHlsZVNoZWV0KCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcihzdHlsZVNoZWV0ID8gc3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSk7CisgICAgUmVm
UHRyPFN0eWxlS2V5ZnJhbWU+IGtleWZyYW1lID0gcGFyc2VyLnBhcnNlS2V5ZnJhbWVSdWxlKHN0
eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMCwgcnVsZVRleHQpOwogICAgIGlm
ICgha2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsOSArMzA3
LDkgQEAgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBET01JbXBsZW1lbnRhdAogewogICAgIC8v
IEZJWE1FOiBUaXRsZSBzaG91bGQgYmUgc2V0LgogICAgIC8vIEZJWE1FOiBNZWRpYSBjb3VsZCBo
YXZlIHdyb25nIHN5bnRheCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgZ2VuZXJhdGUgYW4gZXhj
ZXB0aW9uLgotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHNoZWV0ID0gU3R5bGVT
aGVldEludGVybmFsOjpjcmVhdGUoKTsKICAgICBzaGVldC0+c2V0TWVkaWFRdWVyaWVzKE1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobWVkaWEpKTsKLSAgICBy
ZXR1cm4gc2hlZXQucmVsZWFzZSgpOworICAgIHJldHVybiBDU1NTdHlsZVNoZWV0OjpjcmVhdGUo
c2hlZXQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgdmFsaWRYTUxNSU1FVHlwZUNo
YXJzID0gIlswLTlhLXpBLVpfXFwtK34hJFxcXnt9fC4lJ2AjJipdIjsgLy8gcGVyIFJGQ3M6IDMw
MjMsIDIwNDUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3
ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJr
aXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMjU1Nyw3ICsyNTU3LDcgQEAgdm9p
ZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAgICAgICAgIG1fYmFzZVVSTCA9IEtVUkwoKTsK
IAogICAgIGlmIChtX2VsZW1TaGVldCkKLSAgICAgICAgbV9lbGVtU2hlZXQtPnNldEZpbmFsVVJM
KG1fYmFzZVVSTCk7CisgICAgICAgIG1fZWxlbVNoZWV0LT5pbnRlcm5hbCgpLT5zZXRGaW5hbFVS
TChtX2Jhc2VVUkwpOwogICAgIAogICAgIGlmICghZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRp
ZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7CiAgICAgICAgIC8vIEJhc2UgVVJMIGNoYW5n
ZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxpbmtzLgpAQCAtMjY4OCw3ICsyNjg4LDcg
QEAgYm9vbCBEb2N1bWVudDo6Y2FuQmVBY2Nlc3NlZEJ5RXZlcnlBbmNlcwogICAgIHJldHVybiB0
cnVlOwogfQogCi1DU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCitTdHls
ZVNoZWV0SW50ZXJuYWwqIERvY3VtZW50OjpwYWdlVXNlclNoZWV0KCkKIHsKICAgICBpZiAobV9w
YWdlVXNlclNoZWV0KQogICAgICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwpAQCAt
MjcwMiw3ICsyNzAyLDcgQEAgQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQo
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICAvLyBQYXJzZSB0aGUgc2hlZXQgYW5kIGNh
Y2hlIGl0LgotICAgIG1fcGFnZVVzZXJTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGlu
ZSh0aGlzLCBzZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOworICAgIG1fcGFn
ZVVzZXJTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlSW5saW5lKHRoaXMsIHNldHRp
bmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CiAgICAgbV9wYWdlVXNlclNoZWV0LT5z
ZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOwogICAgIG1fcGFnZVVzZXJTaGVldC0+cGFyc2VTdHJp
bmcodXNlclNoZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFpblF1aXJrc01vZGUoKSkp
OwogICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CkBAIC0yNzIzLDcgKzI3MjMsNyBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVQYWdlVXNlclNoZWV0KCkKICAgICAgICAgc3R5bGVTZWxl
Y3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKLWNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBj
b25zdAorY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIERvY3VtZW50
OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QKIHsKICAgICBpZiAobV9wYWdlR3JvdXBVc2Vy
U2hlZXRDYWNoZVZhbGlkKQogICAgICAgICByZXR1cm4gbV9wYWdlR3JvdXBVc2VyU2hlZXRzLmdl
dCgpOwpAQCAtMjc0OCwxMSArMjc0OCwxMSBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4qIERvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
IVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5zKHVybCgpLCBzaGVldC0+d2hp
dGVsaXN0KCksIHNoZWV0LT5ibGFja2xpc3QoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFyc2VkU2hlZXQgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1bWVudCo+KHRoaXMpLCBzaGVldC0+
dXJsKCkpOworICAgICAgICAgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gcGFyc2VkU2hl
ZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50
Kj4odGhpcyksIHNoZWV0LT51cmwoKSk7CiAgICAgICAgICAgICBwYXJzZWRTaGVldC0+c2V0SXNV
c2VyU3R5bGVTaGVldChzaGVldC0+bGV2ZWwoKSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWwpOwogICAg
ICAgICAgICAgcGFyc2VkU2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0LT5zb3VyY2UoKSwgc3RyaWN0
VG9DU1NQYXJzZXJNb2RlKCFpblF1aXJrc01vZGUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3Bh
Z2VHcm91cFVzZXJTaGVldHMpCi0gICAgICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPik7CisgICAgICAg
ICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiA+KTsKICAgICAgICAgICAgIG1fcGFnZUdyb3VwVXNlclNo
ZWV0cy0+YXBwZW5kKHBhcnNlZFNoZWV0LnJlbGVhc2UoKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNzc2LDEwICsyNzc2LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VHcm91cFVzZXJT
aGVldHMKICAgICAgICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZFVzZXJTaGVldChQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IHVzZXJTaGVldCkKK3ZvaWQgRG9jdW1lbnQ6OmFkZFVzZXJTaGVldChQYXNzUmVmUHRy
PFN0eWxlU2hlZXRJbnRlcm5hbD4gdXNlclNoZWV0KQogewogICAgIGlmICghbV91c2VyU2hlZXRz
KQotICAgICAgICBtX3VzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+KTsKKyAgICAgICAgbV91c2VyU2hlZXRzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KTsKICAgICBtX3VzZXJTaGVldHMtPmFwcGVu
ZCh1c2VyU2hlZXQpOwogICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRp
YXRlbHkpOwogfQpAQCAtMjc4Nyw3ICsyNzg3LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRkVXNlclNo
ZWV0KFBhc3NSZWZQdHI8QwogQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6OmVsZW1lbnRTaGVldCgp
CiB7CiAgICAgaWYgKCFtX2VsZW1TaGVldCkKLSAgICAgICAgbV9lbGVtU2hlZXQgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGVJbmxpbmUodGhpcywgbV9iYXNlVVJMKTsKKyAgICAgICAgbV9lbGVtU2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxp
bmUodGhpcywgbV9iYXNlVVJMKSk7CiAgICAgcmV0dXJuIG1fZWxlbVNoZWV0LmdldCgpOwogfQog
CkBAIC0zMzE2LDEwICszMzE2LDggQEAgdm9pZCBEb2N1bWVudDo6Y29sbGVjdEFjdGl2ZVN0eWxl
c2hlZXRzKAogICAgIH0KIH0KIAotYm9vbCBEb2N1bWVudDo6dGVzdEFkZGVkU3R5bGVzaGVldFJl
cXVpcmVzU3R5bGVSZWNhbGMoQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCkKK2Jvb2wgRG9jdW1l
bnQ6OnRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxlU2hlZXRJbnRl
cm5hbCogc3R5bGVzaGVldCkKIHsKLSAgICBpZiAoc3R5bGVzaGVldC0+ZGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFNlZSBpZiBhbGwgcnVsZXMgb24gdGhlIHNoZWV0
IGFyZSBzY29wZWQgdG8gc29tZSBzcGVjaWZpYyBpZHMgb3IgY2xhc3Nlcy4KICAgICAvLyBUaGVu
IHRlc3QgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbnkgb2YgdGhvc2UgaW4gdGhlIHRyZWUgYXQgdGhl
IG1vbWVudC4KICAgICAvLyBGSVhNRTogRXZlbiB3ZSBpZiB3ZSBmaW5kIHNvbWUsIHdlIGNvdWxk
IGp1c3QgaW52YWxpZGF0ZSB0aG9zZSBzdWJ0cmVlcyBpbnN0ZWFkIG9mIGludmFsaWRhdGluZyB0
aGUgZW50aXJlIHN0eWxlLgpAQCAtMzM5MSw3ICszMzg5LDkgQEAgdm9pZCBEb2N1bWVudDo6YW5h
bHl6ZVN0eWxlc2hlZXRDaGFuZ2UoUwogICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFN0eWxlc2hl
ZXRDb3VudDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7CiAgICAgICAgIGlmICghbmV3
U3R5bGVzaGVldHNbaV0tPmlzQ1NTU3R5bGVTaGVldCgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpZiAodGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG5ld1N0eWxlc2hlZXRzW2ldLmdldCgpKSkpCisgICAgICAg
IGlmIChuZXdTdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAodGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG5ld1N0eWxlc2hlZXRzW2ldLmdldCgpKS0+aW50ZXJu
YWwoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlcXVpcmVzRnVsbFN0eWxl
UmVjYWxjID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTEzOTAy
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMs
NyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTEyNyw2ICsxMjcsNyBAQCBjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CiBjbGFzcyBTZWdtZW50ZWRTdHJpbmc7CiBjbGFzcyBTZXR0aW5nczsKIGNs
YXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiBjbGFzcyBTdHlsZVNo
ZWV0TGlzdDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwpAQCAtNjIz
LDE2ICs2MjQsMTYgQEAgcHVibGljOgogICAgIGJvb2wgY2FuTmF2aWdhdGUoRnJhbWUqIHRhcmdl
dEZyYW1lKTsKICAgICBib29sIGNhbkJlQWNjZXNzZWRCeUV2ZXJ5QW5jZXN0b3JGcmFtZSgpOwog
Ci0gICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOworICAgIFN0eWxlU2hlZXRJbnRl
cm5hbCogcGFnZVVzZXJTaGVldCgpOwogICAgIHZvaWQgY2xlYXJQYWdlVXNlclNoZWV0KCk7CiAg
ICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdDsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogcGFnZUdyb3VwVXNlclNoZWV0
cygpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJQYWdlR3JvdXBVc2VyU2hlZXRzKCk7CiAgICAgdm9p
ZCB1cGRhdGVQYWdlR3JvdXBVc2VyU2hlZXRzKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclNoZWV0cy5nZXQoKTsgfQotICAgIHZvaWQgYWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gdXNlclNoZWV0KTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hl
ZXRJbnRlcm5hbD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
U2hlZXRzLmdldCgpOyB9CisgICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNo
ZWV0SW50ZXJuYWw+IHVzZXJTaGVldCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBlbGVtZW50U2hl
ZXQoKTsKICAgICAKQEAgLTExODEsNyArMTE4Miw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9v
bCB1cGRhdGVBY3RpdmVTdHlsZXNoZWV0cyhTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZyk7CiAgICAg
dm9pZCBjb2xsZWN0QWN0aXZlU3R5bGVzaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+
Jik7Ci0gICAgYm9vbCB0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhDU1NT
dHlsZVNoZWV0Kik7CisgICAgYm9vbCB0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJl
Y2FsYyhTdHlsZVNoZWV0SW50ZXJuYWwqKTsKICAgICB2b2lkIGFuYWx5emVTdHlsZXNoZWV0Q2hh
bmdlKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hl
ZXQ+ID4mIG5ld1N0eWxlc2hlZXRzLCBib29sJiByZXF1aXJlc1N0eWxlU2VsZWN0b3JSZXNldCwg
Ym9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwogCiAgICAgdm9pZCBkZWxldGVDdXN0b21G
b250cygpOwpAQCAtMTI1Nyw5ICsxMjU4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzTm9k
ZXNXaXRoUGxhY2Vob2xkZXJTdHlsZTsKIAogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX2Vs
ZW1TaGVldDsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlVXNlclNoZWV0OwotICAg
IG11dGFibGUgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiA+IG1fcGFnZUdy
b3VwVXNlclNoZWV0czsKLSAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+
ID4gbV91c2VyU2hlZXRzOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1fcGFnZVVz
ZXJTaGVldDsKKyAgICBtdXRhYmxlIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRl
cm5hbD4gPiA+IG1fcGFnZUdyb3VwVXNlclNoZWV0czsKKyAgICBPd25QdHI8VmVjdG9yPFJlZlB0
cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4gPiBtX3VzZXJTaGVldHM7CiAgICAgbXV0YWJsZSBib29s
IG1fcGFnZUdyb3VwVXNlclNoZWV0Q2FjaGVWYWxpZDsKIAogICAgIGJvb2wgbV9wcmludGluZzsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAkocmV2
aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFbGVtZW50
QXR0cmlidXRlRGF0YS5oIgogCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODIsNyArODMsNyBA
QCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTCiAgICAgICAgIG1faW5s
aW5lU3R5bGVEZWNsID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIG1faW5s
aW5lU3R5bGVEZWNsLT5zZXRDU1NQYXJzZXJNb2RlKHN0cmljdFRvQ1NTUGFyc2VyTW9kZShlbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpKSk7CiAgICAgfQotICAgIG1faW5saW5lU3R5bGVEZWNsLT5wYXJzZURlY2xhcmF0aW9uKHRl
eHQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBtX2lubGluZVN0
eWxlRGVjbC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBlbGVtZW50LT5kb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7CiB9CiAKIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmRlc3Ryb3lJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDExMzkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTEsMTUgKzIxMSwxNiBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlv
bjo6c2V0Q1NTU3R5bGVTCiAgICAgfQogCiAgICAgQVNTRVJUKG1faXNDU1MpOwotICAgIFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiBuZXdTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBo
cmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKLSAgICBtX3NoZWV0ID0gbmV3U2hlZXQ7CisgICAgUmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbmV3U2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNy
ZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKKyAgICBtX3NoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKG5ld1NoZWV0KTsKICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBjcm9z
cy1vcmlnaW4gc2VjdXJpdHkgY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGFyZQogICAgIC8vIGdldHRp
bmcgdGhlIHNoZWV0IHRleHQgaW4gInN0cmljdCIgbW9kZS4gVGhpcyBlbmZvcmNlcyBhIHZhbGlk
IENTUyBNSU1FCiAgICAgLy8gdHlwZS4KLSAgICBwYXJzZVN0eWxlU2hlZXQoc2hlZXQtPnNoZWV0
VGV4dCh0cnVlKSk7CiAgICAgbmV3U2hlZXQtPnNldFRpdGxlKG1fdGl0bGUpOwogICAgIG5ld1No
ZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlKG1fbWVkaWEpKTsKLSAg
ICBuZXdTaGVldC0+c2V0RGlzYWJsZWQobV9hbHRlcm5hdGUpOworICAgIG1fc2hlZXQtPnNldERp
c2FibGVkKG1fYWx0ZXJuYXRlKTsKKworICAgIHBhcnNlU3R5bGVTaGVldChzaGVldC0+c2hlZXRU
ZXh0KHRydWUpKTsKIH0KIAogI2lmIEVOQUJMRShYU0xUKQpAQCAtMjMzLDcgKzIzNCwxMSBAQCB2
b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0WFNMU3R5bGVTCiAKIHZvaWQgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpwYXJzZVN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzaGVldCkKIHsKLSAg
ICBtX3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldCwgQ1NTU3RyaWN0TW9kZSk7CisgICAgaWYgKG1f
aXNDU1MpCisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihtX3NoZWV0LmdldCgp
KS0+aW50ZXJuYWwoKS0+cGFyc2VTdHJpbmcoc2hlZXQsIENTU1N0cmljdE1vZGUpOworICAgIGVs
c2UgaWYgKG1faXNYU0wpCisgICAgICAgIHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihtX3No
ZWV0LmdldCgpKS0+cGFyc2VTdHJpbmcoc2hlZXQpOworCiAgICAgaWYgKG1fY2FjaGVkU2hlZXQp
CiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICBtX2NhY2hl
ZFNoZWV0ID0gMDsKQEAgLTI0MSw3ICsyNDYsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlv
bjo6cGFyc2VTdHlsZVNoCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAKICAgICBpZiAobV9pc0NT
UykKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5j
aGVja0xvYWRlZCgpOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obV9zaGVl
dC5nZXQoKSktPmludGVybmFsKCktPmNoZWNrTG9hZGVkKCk7CiAjaWYgRU5BQkxFKFhTTFQpCiAg
ICAgZWxzZSBpZiAobV9pc1hTTCkKICAgICAgICAgc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+
KG1fc2hlZXQuZ2V0KCkpLT5jaGVja0xvYWRlZCgpOwpAQCAtMjUzLDggKzI1OCw4IEBAIHZvaWQg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVMKICAgICBBU1NFUlQoIW1fY2FjaGVk
U2hlZXQpOwogICAgIEFTU0VSVCghbV9sb2FkaW5nKTsKICAgICBtX3NoZWV0ID0gc2hlZXQ7Ci0g
ICAgbV9zaGVldC0+c2V0VGl0bGUobV90aXRsZSk7Ci0gICAgbV9zaGVldC0+c2V0RGlzYWJsZWQo
bV9hbHRlcm5hdGUpOworICAgIHNoZWV0LT5pbnRlcm5hbCgpLT5zZXRUaXRsZShtX3RpdGxlKTsK
KyAgICBzaGVldC0+c2V0RGlzYWJsZWQobV9hbHRlcm5hdGUpOwogfQogCiBib29sIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDE2ICsxNjgsMTcg
QEAgdm9pZCBTdHlsZUVsZW1lbnQ6OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIAogICAgICAgICBpZiAo
c2NyZWVuRXZhbC5ldmFsKG1lZGlhUXVlcmllcy5nZXQoKSkgfHwgcHJpbnRFdmFsLmV2YWwobWVk
aWFRdWVyaWVzLmdldCgpKSkgewogICAgICAgICAgICAgZG9jdW1lbnQtPmFkZFBlbmRpbmdTaGVl
dCgpOwogICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fc2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZSwgU3RyaW5nKCksIEtVUkwoKSwgZG9jdW1lbnQtPmlu
cHV0RW5jb2RpbmcoKSk7Ci0gICAgICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZ0F0TGluZSh0
ZXh0LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSksIHN0
YXJ0TGluZU51bWJlcik7Ci0gICAgICAgICAgICBtX3NoZWV0LT5zZXRNZWRpYVF1ZXJpZXMobWVk
aWFRdWVyaWVzLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShlLT50
aXRsZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hl
ZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBkb2N1
bWVudC0+aW5wdXRFbmNvZGluZygpKTsKKyAgICAgICAgICAgIHN0eWxlU2hlZXQtPnBhcnNlU3Ry
aW5nQXRMaW5lKHRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpKSwgc3RhcnRMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHN0eWxlU2hlZXQtPnNldE1l
ZGlhUXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHN0eWxlU2hl
ZXQtPnNldFRpdGxlKGUtPnRpdGxlKCkpOworICAgICAgICAgICAgbV9zaGVldCA9IENTU1N0eWxl
U2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KTsKICAgICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQt
PmNoZWNrTG9hZGVkKCk7CisgICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPmNoZWNrTG9hZGVk
KCk7CiB9CiAKIGJvb2wgU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyAr
MjA2LDcgQEAgYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcgogCiBib29s
IFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBib29s
IGNoYW5nZXMgPSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHls
ZSh0aGlzKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZG9jdW1l
bnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0
ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50
ZXJuYWwoKSk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGlubGluZVN0eWxlQ2hhbmdlZCgp
OwogICAgIHJldHVybiBjaGFuZ2VzOwpAQCAtMjI2LDcgKzIyNiw3IEBAIGJvb2wgU3R5bGVkRWxl
bWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm8KIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkU3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAg
IGlmIChTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0
dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5bGUoKSA6IDApCi0gICAgICAgIGlubGluZVN0eWxlLT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7
CisgICAgICAgIGlubGluZVN0eWxlLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBkb2N1
bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBhdHRyaWJ1dGVOYW1lU29ydChjb25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9t
aWNTdHJpbmc+JiBwMSwgY29uc3QgcGFpcjxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5n
PiYgcDIpCkBAIC0zMzMsNSArMzMzLDEwIEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVy
dHlUb0F0dHJpYnUKIHsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUodmFsdWUsIHVuaXQpKTsKIH0KKyAgICAKK3ZvaWQgU3R5bGVk
RWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBmYWxzZSwgZG9jdW1lbnQo
KS0+ZWxlbWVudFNoZWV0KCktPmludGVybmFsKCkpOworfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDYgQEAgaW5s
aW5lIFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6OgogICAgIHJldHVybiBhdHRyaWJ1
dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZVN0eWxlKCkgOiAwOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUs
IGZhbHNlLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7Ci19Ci0KIH0gLy9uYW1lc3BhY2UK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNo
ZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
TGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgpAQCAtMTc2LDcgKzE3Nyw3IEBAIHZv
aWQgSFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHQKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBjb2xvckF0dHIpCiAgICAgICAgIGFkZEhUTUxDb2xvclRvU3R5bGUoc3R5
bGUsIENTU1Byb3BlcnR5Q29sb3IsIGF0dHItPnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBmYWNlQXR0cikgewotICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Zm9udEZhY2VWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUZvbnRGYWNlVmFsdWUoYXR0ci0+
dmFsdWUoKSwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpKQorICAgICAgICBpZiAoUmVmUHRy
PENTU1ZhbHVlTGlzdD4gZm9udEZhY2VWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUZvbnRG
YWNlVmFsdWUoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmludGVy
bmFsKCkpKQogICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5KENTU1By
b3BlcnR5Rm9udEZhbWlseSwgZm9udEZhY2VWYWx1ZS5yZWxlYXNlKCkpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgSFRNTEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvckF0dHJpYnV0ZShhdHRyLCBzdHls
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUoQXR0CiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0
cikpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciAm
JiBtX3NoZWV0KQotICAgICAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7
CisgICAgICAgICAgICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5zZXRUaXRsZShhdHRyLT52YWx1ZSgp
KTsKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0K
QEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVl
dChjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVl
dDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIFJlZlB0cjxTdHls
ZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0
aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKIAogICAgIGJvb2wgc3RyaWN0UGFyc2luZyA9
ICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKICAgICBib29sIGVuZm9yY2VNSU1FVHlwZSA9
IHN0cmljdFBhcnNpbmc7CkBAIC0zMTEsNyArMzExLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQoYwogI2VuZGlmCiAKICAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hl
ZXQtPnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUsICZ2YWxpZE1JTUVUeXBlKTsKLSAgICBtX3No
ZWV0LT5wYXJzZVN0cmluZyhzaGVldFRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShzdHJpY3RQ
YXJzaW5nKSk7CisgICAgc3R5bGVTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXRUZXh0LCBzdHJpY3RU
b0NTU1BhcnNlck1vZGUoc3RyaWN0UGFyc2luZykpOwogCiAgICAgLy8gSWYgd2UncmUgbG9hZGlu
ZyBhIHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLCBhbmQgdGhlIE1JTUUgdHlwZSBpcyBub3QKICAg
ICAvLyBzdGFuZGFyZCwgcmVxdWlyZSB0aGUgQ1NTIHRvIGF0IGxlYXN0IHN0YXJ0IHdpdGggYSBz
eW50YWN0aWNhbGx5CkBAIC0zMjEsOCArMzIxLDggQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dENTU1N0eWxlU2hlZXQoYwogICAgIGlmICghZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuUmVxdWVzdChiYXNlVVJMKSkKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwogCi0g
ICAgaWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3NoZWV0LT5oYXNT
eW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoKSkKLSAgICAgICAgbV9zaGVldCA9IENTU1N0eWxl
U2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsKKyAgICBpZiAoY3Jv
c3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIXN0eWxlU2hlZXQtPmhhc1N5bnRhY3Rp
Y2FsbHlWYWxpZENTU0hlYWRlcigpKQorICAgICAgICBzdHlsZVNoZWV0ID0gU3R5bGVTaGVldElu
dGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CiAKICAgICBpZiAo
c3RyaWN0UGFyc2luZyAmJiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykgewogICAgICAgICAvLyBX
b3JrIGFyb3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzUw
Pi4KQEAgLTMzMiwyMCArMzMyLDIwIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHls
ZVNoZWV0KGMKICAgICAgICAgLy8gd2hpbGUgdGhlIG90aGVyIGxhY2tzIHRoZSBzZWNvbmQgdHJh
aWxpbmcgbmV3bGluZS4KICAgICAgICAgaWYgKGJhc2VVUkwuc3RyaW5nKCkuZW5kc1dpdGgoc2xh
c2hLSFRNTEZpeGVzRG90Q3NzKSAmJiAhc2hlZXRUZXh0LmlzTnVsbCgpICYmIG1lZGlhV2lraUtI
VE1MRml4ZXNTdHlsZVNoZWV0LnN0YXJ0c1dpdGgoc2hlZXRUZXh0KQogICAgICAgICAgICAgICAg
ICYmIHNoZWV0VGV4dC5sZW5ndGgoKSA+PSBtZWRpYVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5s
ZW5ndGgoKSAtIDEpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3NoZWV0LT5sZW5ndGgoKSA9PSAx
KTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICBtX3NoZWV0LT5k
ZWxldGVSdWxlKDAsIGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChzdHlsZVNoZWV0LT5ydWxlQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgICAgIHN0eWxlU2hlZXQtPmNsZWFyUnVsZXMoKTsKICAgICAg
ICAgfQogICAgIH0KKyAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hl
ZXQpOwogCi0gICAgbV9zaGVldC0+c2V0VGl0bGUodGl0bGUoKSk7CisgICAgc3R5bGVTaGVldC0+
c2V0VGl0bGUodGl0bGUoKSk7CiAKICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBN
ZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1fbWVkaWEpOwot
ICAgIG1fc2hlZXQtPnNldE1lZGlhUXVlcmllcyhtZWRpYS5yZWxlYXNlKCkpOworICAgIHN0eWxl
U2hlZXQtPnNldE1lZGlhUXVlcmllcyhtZWRpYS5yZWxlYXNlKCkpOwogCiAgICAgbV9sb2FkaW5n
ID0gZmFsc2U7Ci0gICAgbV9zaGVldC0+bm90aWZ5TG9hZGVkU2hlZXQoc2hlZXQpOwotICAgIG1f
c2hlZXQtPmNoZWNrTG9hZGVkKCk7CisgICAgc3R5bGVTaGVldC0+bm90aWZ5TG9hZGVkU2hlZXQo
c2hlZXQpOworICAgIHN0eWxlU2hlZXQtPmNoZWNrTG9hZGVkKCk7CiB9CiAKIGJvb2wgSFRNTExp
bmtFbGVtZW50OjpzdHlsZVNoZWV0SXNMb2FkaW5nKCkgY29uc3QKQEAgLTM1NCw3ICszNTQsNyBA
QCBib29sIEhUTUxMaW5rRWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmICghbV9zaGVldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBtX3NoZWV0LT5pc0xvYWRpbmcoKTsKKyAgICByZXR1cm4gbV9zaGVldC0+aW50ZXJuYWwo
KS0+aXNMb2FkaW5nKCk7CiB9CiAKIHZvaWQgSFRNTExpbmtFbGVtZW50OjpsaW5rTG9hZGVkKCkK
QEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyCiAgICAgCiAgICAgLy8gV2FsayB0aGUgVVJMcyBsaW5rZWQgYnkgdGhlIGxpbmtlZC10byBz
dHlsZXNoZWV0LgogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29uc3RfY2Fz
dDxIVE1MTGlua0VsZW1lbnQqPih0aGlzKS0+c2hlZXQoKSkKLSAgICAgICAgc3R5bGVTaGVldC0+
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CisgICAgICAgIHN0eWxlU2hlZXQtPmludGVy
bmFsKCktPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOwogfQogCiB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6YWRkUGVuZGluZ1NoZWV0KFBlbmRpbmdTaGVldFR5cGUgdHlwZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsNyBAQCBQYXNzUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+IEhUTUxTdHls
ZUVsCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQotICAg
ICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgbV9zaGVldC0+
aW50ZXJuYWwoKS0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9ubG9hZEF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlz
LCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZXJyb3JBdHRyKQpAQCAt
MjU5LDcgKzI1OSw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHQK
ICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCiAg
ICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9jYXN0PEhUTUxTdHlsZUVs
ZW1lbnQqPih0aGlzKS0+c2hlZXQoKSkKLSAgICAgICAgc3R5bGVTaGVldC0+YWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHModXJscyk7CisgICAgICAgIHN0eWxlU2hlZXQtPmludGVybmFsKCktPmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOwogfQogCiBib29sIEhUTUxTdHlsZUVsZW1lbnQ6OmRp
c2FibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NSdWxlKiAKICAg
ICAgICAgICAgIG1lZGlhTGlzdCA9IDA7CiAKICAgICAgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQp
IHsKLSAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhcmVudFN0eWxlU2hlZXQtPmZpbmFsVVJMKCk7
CisgICAgICAgICAgICBzb3VyY2VVUkwgPSBwYXJlbnRTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5m
aW5hbFVSTCgpOwogICAgICAgICAgICAgaWYgKHNvdXJjZVVSTC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgc291cmNlVVJMID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5n
KHBhcmVudFN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKTsKICAgICAgICAgfSBlbHNlCkBAIC0y
MjUsOCArMjI1LDggQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIAog
ICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jID0gc3R5bGVTaGVldC0+ZmluZERvY3Vt
ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkb2MpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2VVUkwgPSBkb2MtPnVybCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICghc3R5bGVTaGVldC0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2VVUkwgPSBzdHlsZVNoZWV0LT5maW5hbFVSTCgpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICghc3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBzdHlsZVNoZWV0LT5pbnRl
cm5hbCgpLT5maW5hbFVSTCgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2VVUkwgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgbWVkaWFB
cnJheS0+YWRkSXRlbShidWlsZE1lZGlhT2JqZWN0KG1lZGlhTGlzdCwgc3R5bGVTaGVldC0+b3du
ZXJOb2RlKCkgPyBNZWRpYUxpc3RTb3VyY2VMaW5rZWRTaGVldCA6IE1lZGlhTGlzdFNvdXJjZUlu
bGluZVNoZWV0LCBzb3VyY2VVUkwpKTsKQEAgLTMxNCw3ICszMTQsNyBAQCBib29sIEluc3BlY3Rv
clN0eWxlOjpzZXRQcm9wZXJ0eVRleHQodW5zCiAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiB0ZW1wTXV0YWJsZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAg
ICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJj
ZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICBDU1NQYXJzZXIgcDsKLSAgICAgICAgcC5wYXJzZURl
Y2xhcmF0aW9uKHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJv
Z3VzUHJvcGVydHlOYW1lICsgIjogbm9uZSIsICZzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRT
dHlsZVNoZWV0KCkpOworICAgICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHls
ZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25l
IiwgJnNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+aW50ZXJuYWwoKSk7
CiAgICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBz
b3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQg
PSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwogCkBAIC02ODksOCArNjg5LDggQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0bwogLy8gc3RhdGljCiBTdHJpbmcgSW5zcGVjdG9y
U3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCkK
IHsKLSAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5maW5hbFVSTCgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2VTdHlsZVNoZWV0LT5maW5hbFVSTCgpLnN0
cmluZygpOworICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPmludGVy
bmFsKCktPmZpbmFsVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcGFnZVN0eWxlU2hl
ZXQtPmludGVybmFsKCktPmZpbmFsVVJMKCkuc3RyaW5nKCk7CiAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiB9CiAKQEAgLTcxOCw4ICs3MTgsOSBAQCBTdHJpbmcgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZmluYWxVUkwoKSBjCiAKIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIG1fcGFnZVN0eWxlU2hlZXQtPmNsZWFy
UnVsZXMoKTsKLSAgICBtX3BhZ2VTdHlsZVNoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCBtX3BhZ2VT
dHlsZVNoZWV0LT5jc3NQYXJzZXJNb2RlKCkpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmludGVy
bmFsKCktPmNsZWFyUnVsZXMoKTsKKyAgICBtX3BhZ2VTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5w
YXJzZVN0cmluZyh0ZXh0LCBtX3BhZ2VTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jc3NQYXJzZXJN
b2RlKCkpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVy
cygpOwogICAgIG1fcGFnZVN0eWxlU2hlZXQtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgbV9p
bnNwZWN0b3JTdHlsZXMuY2xlYXIoKTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKQEAg
LTEwODcsMTQgKzEwODgsMTQgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3Vy
Y2VEYQogICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNUZXh0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBuZXdTdHlsZVNoZWV0ID0g
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4g
bmV3U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFy
c2VyIHA7CiAgICAgU3R5bGVSdWxlUmFuZ2VNYXAgcnVsZVJhbmdlTWFwOwogICAgIHAucGFyc2VT
aGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwg
JnJ1bGVSYW5nZU1hcCk7CiAgICAgT3duUHRyPFBhcnNlZFN0eWxlU2hlZXQ6OlNvdXJjZURhdGE+
IHJhbmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YSkp
OwogCiAgICAgVmVjdG9yPENTU1N0eWxlUnVsZSo+IHJ1bGVzOwotICAgIFJlZlB0cjxDU1NSdWxl
TGlzdD4gcnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KG5ld1N0eWxlU2hlZXQuZ2V0KCkpOworICAg
IFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZShuZXdTdHlsZVNoZWV0KS5nZXQoKSk7CiAgICAgY29sbGVjdEZsYXRSdWxlcyhy
dWxlTGlzdCwgJnJ1bGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMu
c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjppdGVy
YXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpLT5zdHlsZVJ1bGUoKSk7CkBA
IC0xNDE0LDcgKzE0MTUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6CiAKICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcERlY2xhcmF0aW9uID0gU3R5
bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyIHA7Ci0gICAgcC5wYXJzZURl
Y2xhcmF0aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsIHJlc3VsdCwgbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CisgICAgcC5wYXJzZURlY2xhcmF0
aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsIHJlc3VsdCwgbV9lbGVtZW50
LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZp
c2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZUNTU1N0eWxlU2gKIAogICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICFtX3Jlc291cmNl
VVJMcy5jb250YWlucyh1cmwpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sg
d2hldGhlciBhIGNoYXJzZXQgaGFzIGJlZW4gc3BlY2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3Vu
ZCBhZGQgb25lLgotICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKHN0eWxlU2hlZXQt
PmNoYXJzZXQoKSk7CisgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+Y2hhcnNldCgpKTsKICAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5p
c1ZhbGlkKCkpOwogICAgICAgICBTdHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmco
KTsKICAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5n
LmNoYXJhY3RlcnMoKSwgdGV4dFN0cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKEF0dAogCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGl0bGVB
dHRyKSB7CiAgICAgICAgIGlmIChtX3NoZWV0KQotICAgICAgICAgICAgbV9zaGVldC0+c2V0VGl0
bGUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgICAgICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5zZXRU
aXRsZShhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCiAgKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDE1ICs2
NCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+WFNMU3R5bGVTaGVldCgpOwot
ICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQv
eG1sIjsgfQogCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VNb2RlID0gQ1NTU3RyaWN0TW9kZSk7CisgICAgYm9vbCBwYXJz
ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCk7CiAgICAgdm9pZCBjaGVja0xvYWRlZCgpOworICAgIAorICAgIGNvbnN0IEtVUkwmIGZpbmFs
VVJMKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFVSTDsgfQogCiAgICAgdm9pZCBsb2FkQ2hpbGRT
aGVldHMoKTsKICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CkBA
IC04MCw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKIAogICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCk7Ci0gICAg
WFNMU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
U3R5bGVTaGVldDsgfQorICAgIHZpcnR1YWwgWFNMU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVl
dCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQogICAgIHZv
aWQgc2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpOwogCiAjaWYgVVNF
KFFYTUxRVUVSWSkKQEAgLTk1LDEyICs5MiwzMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtB
c1Byb2Nlc3NlZCgpOwogICAgIGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9j
ZXNzZWQ7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gInRleHQveG1sIjsgfQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1faXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRE
aXNhYmxlZChib29sIGIpIE9WRVJSSURFIHsgbV9pc0Rpc2FibGVkID0gYjsgfQorICAgIHZpcnR1
YWwgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lck5vZGU7
IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9v
cmlnaW5hbFVSTDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJO
b2RlKCkgT1ZFUlJJREUgeyBtX293bmVyTm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFz
ZVVSTCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNY
U0xTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRl
OgogICAgIFhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGJvb2wgZW1iZWRkZWQpOwogI2lmICFVU0Uo
UVhNTFFVRVJZKQogICAgIFhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFyZW50SW1wb3J0
LCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCk7CiAjZW5k
aWYKKyAgICAKKyAgICBOb2RlKiBtX293bmVyTm9kZTsKKyAgICBTdHJpbmcgbV9vcmlnaW5hbFVS
TDsKKyAgICBLVVJMIG1fZmluYWxVUkw7CisgICAgYm9vbCBtX2lzRGlzYWJsZWQ7CiAKICAgICBW
ZWN0b3I8T3duUHRyPFhTTEltcG9ydFJ1bGU+ID4gbV9jaGlsZHJlbjsKIApJbmRleDogU291cmNl
L1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCShyZXZpc2lvbiAxMTM5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBY
U0wgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU1LDcgKzU1LDEwIEBAIFNPRlRfTElOSyhsaWJ4
c2x0LCB4c2x0TG9hZFN0eWxlc2hlZXRQSSwKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogWFNMU3R5
bGVTaGVldDo6WFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAgICA6IFN0eWxlU2hl
ZXQoc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwpCisgICAgOiBt
X293bmVyTm9kZSgwKQorICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAsIG1f
ZmluYWxVUkwoZmluYWxVUkwpCisgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX2Vt
YmVkZGVkKGZhbHNlKQogICAgICwgbV9wcm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBn
ZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxs
eSBzZWVuIHRoZW0uCiAgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKQEAgLTY1LDcgKzY4LDEwIEBA
IFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnUKIH0KIAogWFNMU3R5bGVT
aGVldDo6WFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHls
ZVNoZWV0KHBhcmVudE5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCkKKyAgICA6IG1fb3duZXJO
b2RlKHBhcmVudE5vZGUpCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwg
bV9maW5hbFVSTChmaW5hbFVSTCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKICAgICAsIG1f
ZW1iZWRkZWQoZW1iZWRkZWQpCiAgICAgLCBtX3Byb2Nlc3NlZCh0cnVlKSAvLyBUaGUgcm9vdCBz
aGVldCBzdGFydHMgb2ZmIHByb2Nlc3NlZC4KICAgICAsIG1fc3R5bGVzaGVldERvYygwKQpAQCAt
ODUsNyArOTEsNyBAQCBYU0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCiAgICAgfQogfQog
Ci1ib29sIFhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCitib29sIFhTTFN0eWxlU2hlZXQ6Omlz
TG9hZGluZygpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRy
ZW4uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fY2hpbGRyZW4uYXQoaSktPmlzTG9hZGlu
ZygpKQpAQCAtMTI5LDcgKzEzNSw3IEBAIENhY2hlZFJlc291cmNlTG9hZGVyKiBYU0xTdHlsZVNo
ZWV0OjpjYWMKICAgICByZXR1cm4gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiB9
CiAKLWJvb2wgWFNMU3R5bGVTaGVldDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IENTU1BhcnNlck1vZGUpCitib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewogICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4g
eG1sRG9jUHRyCiAgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOwpJbmRleDogU291cmNlL1dl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNo
ZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtV
UkwmIGZpbmFsVVJMLCAgYm9vbCBlbWJlZGRlZCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9k
ZSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMKQorICAgIDogbV9vd25lck5vZGUocGFyZW50Tm9kZSkK
KyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFs
VVJMKQorICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9lbWJlZGRlZChlbWJlZGRl
ZCkKIHsKIH0KQEAgLTQ3LDcgKzUwLDcgQEAgWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hlZXQo
KQogICAgIH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQorYm9vbCBYU0xT
dHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNzIsNyArNzUsNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlciog
WFNMU3R5bGVTaGVldDo6Y2FjCiAgICAgcmV0dXJuIGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOwogfQogCi1ib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2RlKQorYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogRml4IFFYbWxRdWVyeSBz
byB0aGF0IGl0IGFsbG93cyBjb21waWxpbmcgdGhlIHN0eWxlc2hlZXQgYmVmb3JlIHNldHRpbmcg
dGhlIGRvY3VtZW50CiAgICAgLy8gdG8gYmUgdHJhbnNmb3JtZWQuIFRoaXMgd2F5IHdlIGNvdWxk
IG5vdCBvbmx5IGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGNvcnJlY3QgYmVmb3JlIHVzaW5n
IGl0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFdlYkRvY3VtZW50
OjppbnNlcnRVc2VyU3R5bGVTaGVldChjCiB7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVu
dCA9IHVud3JhcDxEb2N1bWVudD4oKTsKIAotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYXJz
ZWRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7CisgICAgUmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gcGFyc2VkU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6
OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7CiAgICAgcGFyc2VkU2hlZXQtPnNldElzVXNlclN0eWxl
U2hlZXQobGV2ZWwgPT0gVXNlclN0eWxlVXNlckxldmVsKTsKICAgICBwYXJzZWRTaGVldC0+cGFy
c2VTdHJpbmcoc291cmNlQ29kZSwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVudC0+aW5R
dWlya3NNb2RlKCkpKTsKICAgICBkb2N1bWVudC0+YWRkVXNlclNoZWV0KHBhcnNlZFNoZWV0LnJl
bGVhc2UoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136778</attachid>
            <date>2012-04-11 16:11:30 -0700</date>
            <delta_ts>2012-04-11 16:14:28 -0700</delta_ts>
            <desc>fix a crashing test</desc>
            <filename>stylesheet-internal-22.patch</filename>
            <type>text/plain</type>
            <size>124286</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBAQAorMjAxMi0wNC0xMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ1NTU3R5bGVTaGVl
dCBpbnRvIGludGVybmFsIGFuZCBDU1NPTSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBzZXBh
cmF0aW9uIG9mIG91ciBzdHlsZSBzaGVldCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDU1NPTS4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBpbnRlcm5hbCBwYXJ0cyBvZiBDU1NTdHlsZVNoZWV0IHNwbGl0
IGludG8gU3R5bGVTaGVldEludGVybmFsLiBDU1MgcGFyc2VyCisgICAgICAgIGFuZCBzdHlsZSBz
ZWxlY3RvciB3aWxsIG9wZXJhdGUgb24gaW50ZXJuYWwgdHlwZXMuIFVubGluZSBvdGhlciBDU1NP
TSB0eXBlcworICAgICAgICBDU1NTdHlsZVNoZWV0cyBhcmUgc3RpbGwgYWx3YXlzIGluc3RhbnRp
YXRlZCB0byBob2xkIHRoZSB0b3AgbGV2ZWwgYXV0aG9yIHN0eWxlc2hlZXRzCisgICAgICAgIChi
eSBOb2RlcykgYW5kIGFjdCBhcyBpbnRlcmZhY2UgZnJvbSBET00gdHlwZXMuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NT
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVs
ZTo6c3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUltcG9ydDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVJbXBvcnQ6OnN0eWxlU2hlZXQpOgorICAgICAgICAoQ1NTSW1wb3J0UnVsZSk6Cisg
ICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRp
YVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VL
ZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENTU1BhcnNlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAg
IChDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgIChDU1NSZWZs
ZWN0VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAgIChDU1NSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBzZXQgZm9yIHJvb3QgQ1NTU3R5bGVTaGVldCBvYmplY3RzIHNvIHRoYXQg
dGhlIHdyYXBwZXJzIGNyZWF0ZWQgaW4gZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rv
cgorICAgICAgICAgICAgc3RheSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpTdHls
ZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp+
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5h
bDo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJu
YWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
SW50ZXJuYWw6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVl
dEludGVybmFsOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZ0F0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6bm90aWZ5TG9hZGVkU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmZpbmREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnNldE1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpiYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcmVudFN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6
ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjptZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSk6CisgICAgICAgIChTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpvd25lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjbGVhck93bmVyTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om93bmVyUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6Om9yaWdpbmFsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldEludGVybmFsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNo
ZWV0SW50ZXJuYWw6OnNldEZpbmFsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6ZmluYWxVUkwpOgorICAgICAgICAoQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldDo6cmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpj
bGVhck93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHlsZVNo
ZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXNDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnR5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAg
ICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6CisgICAgICAgIChT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6Om93bmVyUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Ojppc1hTTFN0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydFJ1bGUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlVXNlclNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50VXNlclNoZWV0cyk6CisgICAgICAgICogZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNMU3R5bGVTaGVldDo6ZmluYWxVUkwpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisKIDIwMTIt
MDQtMTAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZCBPVkVSUklERSBhbm5vdGF0aW9ucyBmb3IgY2MgbGF5ZXIgdHlwZXMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHJldmlzaW9u
IDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBTdHJpbmcgQ1NTRm9udEZhY2VTcmNWYWx1
ZTo6Y3VzdG9tQ3NzVGV4CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDU1NGb250RmFj
ZVNyY1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgY29uc3QgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3ZvaWQgQ1NTRm9udEZhY2VTcmNW
YWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNv
bnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAoIWlzTG9jYWwo
KSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgc3R5bGVTaGVldC0+Y29tcGxldGVV
UkwobV9yZXNvdXJjZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3Jj
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOwor
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25z
dCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQoRG9j
dW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNp
b24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUoQ1NTU3R5
bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVy
eVNldD4gbWVkaWEpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVSdWxlSW1wb3J0
OjpjcmVhdGUoU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwg
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUnVsZUltcG9ydChwYXJlbnQsIGhyZWYsIG1lZGlhKSk7CiB9CiAKLVN0eWxlUnVs
ZUltcG9ydDo6U3R5bGVSdWxlSW1wb3J0KENTU1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3Ry
aW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorU3R5bGVSdWxlSW1w
b3J0OjpTdHlsZVJ1bGVJbXBvcnQoU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnQsIGNvbnN0IFN0
cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKICAgICA6IFN0eWxl
UnVsZUJhc2UoSW1wb3J0LCAwKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudCkKICAg
ICAsIG1fc3R5bGVTaGVldENsaWVudCh0aGlzKQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFN0eWxl
UnVsZUltcG9ydDo6c2V0Q1NTU3R5bGVTaGVldChjCiB7CiAgICAgaWYgKG1fc3R5bGVTaGVldCkK
ICAgICAgICAgbV9zdHlsZVNoZWV0LT5jbGVhck93bmVyUnVsZSgpOwotICAgIG1fc3R5bGVTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsK
KyAgICBtX3N0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVm
LCBiYXNlVVJMLCBjaGFyc2V0KTsKIAogICAgIGJvb2wgY3Jvc3NPcmlnaW5DU1MgPSBmYWxzZTsK
ICAgICBib29sIHZhbGlkTUlNRVR5cGUgPSBmYWxzZTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBT
dHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAgICBjcm9zc09yaWdpbkNT
UyA9IHRydWU7CiAKICAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYg
IW1fc3R5bGVTaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCi0gICAgICAg
IG1fc3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJM
LCBjaGFyc2V0KTsKKyAgICAgICAgbV9zdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpj
cmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CiAKICAgICBpZiAoaXNTdHJpY3RQ
YXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CiAg
ICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgzNTA+LgpAQCAtOTgsOSArOTgsOCBAQCB2b2lkIFN0eWxlUnVsZUltcG9ydDo6c2V0
Q1NTU3R5bGVTaGVldChjCiAgICAgICAgIC8vIHdoaWxlIHRoZSBvdGhlciBsYWNrcyB0aGUgc2Vj
b25kIHRyYWlsaW5nIG5ld2xpbmUuCiAgICAgICAgIGlmIChiYXNlVVJMLnN0cmluZygpLmVuZHNX
aXRoKHNsYXNoS0hUTUxGaXhlc0RvdENzcykgJiYgIXNoZWV0VGV4dC5pc051bGwoKSAmJiBtZWRp
YVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5zdGFydHNXaXRoKHNoZWV0VGV4dCkKICAgICAgICAg
ICAgICAgICAmJiBzaGVldFRleHQubGVuZ3RoKCkgPj0gbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxl
U2hlZXQubGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdHlsZVNoZWV0LT5s
ZW5ndGgoKSA9PSAxKTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAg
ICBtX3N0eWxlU2hlZXQtPmRlbGV0ZVJ1bGUoMCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKG1f
c3R5bGVTaGVldC0+Y2hpbGRSdWxlcygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIG1fc3R5
bGVTaGVldC0+Y2xlYXJSdWxlcygpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzYsOCArMTM1
LDggQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RTdHlsZVNoZWV0KAogCiAgICAgLy8g
Q2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBh
IHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJM
LCB0aGVuIGp1c3QgYmFpbC4KLSAgICBDU1NTdHlsZVNoZWV0KiByb290U2hlZXQgPSBtX3BhcmVu
dFN0eWxlU2hlZXQ7Ci0gICAgZm9yIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IG1fcGFyZW50U3R5
bGVTaGVldDsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgeworICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OworICAg
IGZvciAoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsgc2hl
ZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyB3cm9uZyBpZiB0aGUgZmluYWxVUkwgd2FzIHVwZGF0ZWQgdmlhIGRvY3VtZW50
Ojp1cGRhdGVCYXNlVVJMLgogICAgICAgICBpZiAoYWJzSHJlZiA9PSBzaGVldC0+ZmluYWxVUkwo
KS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2Niw2ICsxNjUsMTIgQEAgQ1NT
SW1wb3J0UnVsZTo6Q1NTSW1wb3J0UnVsZShTdHlsZVJ1bGVJbQogewogfQogCitDU1NJbXBvcnRS
dWxlOjp+Q1NTSW1wb3J0UnVsZSgpCit7CisgICAgaWYgKG1fc3R5bGVTaGVldENTU09NV3JhcHBl
cikKKyAgICAgICAgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyLT5jbGVhck93bmVyUnVsZSgpOwor
fQorCiBNZWRpYUxpc3QqIENTU0ltcG9ydFJ1bGU6Om1lZGlhKCkKIHsKICAgICByZXR1cm4gbV9p
bXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKS0+ZW5zdXJlTWVkaWFMaXN0KHBhcmVudFN0eWxlU2hl
ZXQoKSk7CkBAIC0xODcsNCArMTkyLDE1IEBAIFN0cmluZyBDU1NJbXBvcnRSdWxlOjpjc3NUZXh0
KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKK0NTU1N0eWxlU2hl
ZXQqIENTU0ltcG9ydFJ1bGU6OnN0eWxlU2hlZXQoKSBjb25zdAoreyAKKyAgICBpZiAoIW1faW1w
b3J0UnVsZS0+c3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXIg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUobV9pbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIGNvbnN0
X2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHRoaXMpKTsKKyAgICByZXR1cm4gbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyLmdldCgpOyAKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMywx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xh
c3MgTWVkaWFMaXN0OwogY2xhc3MgTWVkaWFRdWVyeVNldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRl
cm5hbDsKIAogY2xhc3MgU3R5bGVSdWxlSW1wb3J0IDogcHVibGljIFN0eWxlUnVsZUJhc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gY3JlYXRlKENT
U1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlh
UXVlcnlTZXQ+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0
ZShTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+KTsKIAogICAgIH5TdHlsZVJ1bGVJbXBvcnQoKTsKICAgICAKLSAg
ICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRTdHlsZVNoZWV0OyB9CisgICAgU3R5bGVTaGVldEludGVybmFsKiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCBjbGVhclBh
cmVudFN0eWxlU2hlZXQoKSB7IG1fcGFyZW50U3R5bGVTaGVldCA9IDA7IH0KIAogICAgIFN0cmlu
ZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9Ci0gICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldC5nZXQoKTsgfQorICAgIFN0
eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVl
dC5nZXQoKTsgfQogCiAgICAgLy8gTm90IHBhcnQgb2YgdGhlIENTU09NLgogICAgIGJvb2wgaXNM
b2FkaW5nKCkgY29uc3Q7CkBAIC03MCwxNSArNzEsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICBm
cmllbmQgY2xhc3MgSW1wb3J0ZWRTdHlsZVNoZWV0Q2xpZW50OwogCi0gICAgU3R5bGVSdWxlSW1w
b3J0KENTU1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRy
PE1lZGlhUXVlcnlTZXQ+KTsKKyAgICBTdHlsZVJ1bGVJbXBvcnQoU3R5bGVTaGVldEludGVybmFs
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CiAKLSAgICAvLyBGWElNRTogVGhpcyBuZWVkcyB0byBnbyBhd2F5LgotICAgIENTU1N0eWxlU2hl
ZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIG1fcGFyZW50
U3R5bGVTaGVldDsKIAogICAgIEltcG9ydGVkU3R5bGVTaGVldENsaWVudCBtX3N0eWxlU2hlZXRD
bGllbnQ7CiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4g
bV9tZWRpYVF1ZXJpZXM7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsK
KyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBtX3N0eWxlU2hlZXQ7CiAgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKICAgICBi
b29sIG1fbG9hZGluZzsKIH07CkBAIC04NiwxMCArODYsMTIgQEAgcHJpdmF0ZToKIGNsYXNzIENT
U0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTSW1wb3J0UnVsZT4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCogcnVsZSwgQ1NTU3R5
bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NJbXBvcnRSdWxlKHJ1bGUs
IHNoZWV0KSk7IH0KKyAgICAKKyAgICB+Q1NTSW1wb3J0UnVsZSgpOwogCiAgICAgU3RyaW5nIGhy
ZWYoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydFJ1bGUtPmhyZWYoKTsgfQogICAgIE1lZGlhTGlz
dCogbWVkaWEoKTsKLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCk7IH0KKyAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KCkgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIApAQCAt
OTcsNiArOTksOCBAQCBwcml2YXRlOgogICAgIENTU0ltcG9ydFJ1bGUoU3R5bGVSdWxlSW1wb3J0
KiwgQ1NTU3R5bGVTaGVldCopOwogCiAgICAgUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gbV9pbXBv
cnRSdWxlOworCisgICAgbXV0YWJsZSBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0
Q1NTT01XcmFwcGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykg
MjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDUsIDIwMDYsIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC01OCw4ICs1OCw5IEBAIHVuc2lnbmVkIENTU01lZGlhUnVsZTo6aW5zZXJ0UnVsZShjb25zdCAK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQ1NTUGFyc2VyIHAoY3NzUGFyc2VyTW9k
ZSgpKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbmV3UnVsZSA9IHAucGFyc2VSdWxlKHBh
cmVudFN0eWxlU2hlZXQoKSwgcnVsZVN0cmluZyk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0eWxlU2hl
ZXQgPyBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jc3NQYXJzZXJNb2RlKCkgOiBDU1NTdHJpY3RN
b2RlKTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbmV3UnVsZSA9IHBhcnNlci5wYXJzZVJ1
bGUoc3R5bGVTaGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlU3RyaW5nKTsK
ICAgICBpZiAoIW5ld1J1bGUpIHsKICAgICAgICAgLy8gU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRo
ZSBzcGVjaWZpZWQgcnVsZSBoYXMgYSBzeW50YXggZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNl
cihjb25zdCBjaGFyKiAKICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIsIFN0eWxlUnVsZVJhbmdl
TWFwKiBydWxlUmFuZ2VNYXApCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAgbV9k
ZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFj
ZS4KQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHls
ZVNoZWV0CiAgICAgbV9ydWxlID0gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBD
U1NQYXJzZXI6OnBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6cGFyc2VSdWxlKFN0
eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIHNl
dFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBm
YWxzZTsKQEAgLTI3OSw3ICsyNzksNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6cGFyCiAgICAgcmV0dXJuIG1fcnVsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0
ICpzaGVldCwgY29uc3QgU3RyaW5nICZzdHJpbmcpCitQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+
IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCwg
Y29uc3QgU3RyaW5nICZzdHJpbmcpCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAg
c2V0dXBQYXJzZXIoIkAtd2Via2l0LWtleWZyYW1lLXJ1bGV7ICIsIHN0cmluZywgIn0gIik7CkBA
IC05MDksNyArOTA5LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoU3R5bGVQcm9w
ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcsIENTU1N0
eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENT
U1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBT
dHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIFJlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBkdW1teVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAg
ICAgaWYgKCFwYXJzZVZhbHVlKGR1bW15U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rm9udEZhbWls
eSwgc3RyaW5nLCBmYWxzZSwgQ1NTUXVpcmtzTW9kZSwgY29udGV4dFN0eWxlU2hlZXQpKQpAQCAt
OTE3LDcgKzkxNyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnMK
ICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NWYWx1ZUxpc3Q+KGR1bW15U3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7CiB9CiAKLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFu
dCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5
bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRl
Y2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0
SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIGlmIChwYXJzZVNpbXBsZUxlbmd0
aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY3NzUGFy
c2VyTW9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHkKICAgICByZXR1cm4gcGFyc2VyLnBh
cnNlVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250
ZXh0U3R5bGVTaGVldCk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJv
cGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNs
YXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CiAKQEAgLTEwMDcsNyArMTAw
Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYKIAogdm9pZCBD
U1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBk
b2MsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewotICAgIFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiBkdW1teVN0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKKyAg
ICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBkdW1teVN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0
SW50ZXJuYWw6OmNyZWF0ZShkb2MpOwogCiAgICAgc2V0U3R5bGVTaGVldChkdW1teVN0eWxlU2hl
ZXQuZ2V0KCkpOwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rv
ckxpc3Q7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rv
cihjb25zdCBTdHJpCiAgICAgQVNTRVJUKGR1bW15U3R5bGVTaGVldC0+aGFzT25lUmVmKCkpOwog
fQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURh
dGE+KiBzdHlsZVNvdXJjZURhdGEsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFy
YXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiog
c3R5bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KQog
ewogICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAxNTsKQEAgLTEwOTksNyArMTA5OSw3
IEBAIHZvaWQgQ1NTUGFyc2VyOjpjbGVhclByb3BlcnRpZXMoKQogICAgIG1faGFzRm9udEZhY2VP
bmx5VmFsdWVzID0gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpzZXRTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChT
dHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgbV9zdHlsZVNoZWV0ID0gc3R5
bGVTaGVldDsKIH0KQEAgLTcyODIsNyArNzI4Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZs
b3dUaHJlYWQoY29uc3QgU3QKICAgICBBU1NFUlQoZG9jKTsKICAgICBBU1NFUlQoZG9jLT5jc3NS
ZWdpb25zRW5hYmxlZCgpKTsKIAotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBkdW1teVN0eWxl
U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBkdW1teVN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZShk
b2MpOwogICAgIHNldFN0eWxlU2hlZXQoZHVtbXlTdHlsZVNoZWV0LmdldCgpKTsKIAogICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3std2Via2l0LWZsb3ctaW50bzoiLCBmbG93TmFtZSwg
In0iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NiBAQCBjbGFzcyBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU7CiBjbGFzcyBDU1NQcmltaXRpdmVW
YWx1ZTsKIGNsYXNzIENTU1Byb3BlcnR5OwogY2xhc3MgQ1NTU2VsZWN0b3JMaXN0OwotY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xh
c3MgQ1NTV3JhcFNoYXBlOwpAQCAtNjIsNiArNjEsNyBAQCBjbGFzcyBTdHlsZVByb3BlcnR5U2hv
cnRoYW5kOwogY2xhc3MgU3R5bGVSdWxlQmFzZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsK
IGNsYXNzIFN0eWxlS2V5ZnJhbWU7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CiBjbGFzcyBT
dHlsZWRFbGVtZW50OwogCiBjbGFzcyBDU1NQYXJzZXIgewpAQCAtNzAsMTUgKzcwLDE1IEBAIHB1
YmxpYzoKIAogICAgIH5DU1NQYXJzZXIoKTsKIAotICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHls
ZVNoZWV0KiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVs
ZVJhbmdlTWFwKiBydWxlUmFuZ2VNYXAgPSAwKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IHBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgUGFzc1Jl
ZlB0cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0
KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNl
ck1vZGUsIENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldElu
dGVybmFsKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVs
ZVJhbmdlTWFwKiA9IDApOworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxl
KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmluZyYpOworICAgIFBhc3NSZWZQdHI8U3R5
bGVLZXlmcmFtZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0Kiwg
Q1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1v
ZGUsIFN0eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdC
QTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3Rh
dGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBE
b2N1bWVudCopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250
RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHls
ZVNoZWV0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZh
Y2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRT
dHlsZVNoZWV0KTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlk
UHJpbWl0aXZlKGludCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVj
bGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHls
ZVNvdXJjZURhdGE+KiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJv
b2wgcGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4qLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KTsKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25z
dCBTdHJpbmcmKTsKIAogICAgIERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSBjb25zdDsKQEAgLTI4
Niw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgQ1NTUGFyc2VyTW9kZSBtX2Nzc1BhcnNlck1vZGU7
CiAgICAgYm9vbCBtX2ltcG9ydGFudDsKICAgICBDU1NQcm9wZXJ0eUlEIG1faWQ7Ci0gICAgQ1NT
U3R5bGVTaGVldCogbV9zdHlsZVNoZWV0OworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogbV9zdHls
ZVNoZWV0OwogICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7CiAgICAgUmVmUHRyPFN0
eWxlS2V5ZnJhbWU+IG1fa2V5ZnJhbWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFR
dWVyeTsKQEAgLTM0NSw3ICszNDUsNyBAQCBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGRldGVj
dERhc2hUb2tlbihpbnQpOwogICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29s
KTsKIAotICAgIHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgdm9pZCBz
ZXRTdHlsZVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCopOwogCiAgICAgaW5saW5lIGJvb2wgaW5T
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jc3NQYXJzZXJNb2RlID09IENTU1N0cmljdE1v
ZGUgfHwgbV9jc3NQYXJzZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGU7IH0KICAgICBpbmxpbmUg
Ym9vbCBpblF1aXJrc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc1BhcnNlck1vZGUgPT0gQ1NT
UXVpcmtzTW9kZTsgfQpAQCAtMzYzLDcgKzM2Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0dl
bmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUqKSBjb25zdDsKICAgICBib29sIHBhcnNl
R2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOwog
Ci0gICAgYm9vbCBwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpOworICAgIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRJbnRlcm5hbCog
Y29udGV4dFN0eWxlU2hlZXQpOwogCiAgICAgZW51bSBTaXplUGFyYW1ldGVyVHlwZSB7CiAgICAg
ICAgIE5vbmUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJ
KHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjAsNyArMTA2MCw3IEBAIFN0cmluZyBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgKICAgICByZXR1cm4gdGV4dDsKIH0KIAotdm9pZCBD
U1NQcmltaXRpdmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mIHVybHMsIGNvbnN0IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ByaW1p
dGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQogewogICAgIGlmIChtX3By
aW1pdGl2ZVVuaXRUeXBlID09IENTU19VUkkpCiAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIHN0eWxlU2hlZXQtPmNvbXBsZXRlVVJMKG1fdmFsdWUuc3RyaW5nKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
Miw3ICsyNzIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJu
IG1faXNRdWlya1ZhbHVlOyB9CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgYWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKIAogICAgIExlbmd0aCB2aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxMTM5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBTdHJpbmcgQ1NTUmVmbGVjdFZhbHVlOjpjdXN0b21Dc3NU
ZXh0KCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKG1fbWFzaykKICAgICAgICAgbV9tYXNrLT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0
eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKIHByaXZhdGU6CiAgICAgQ1NT
UmVmbGVjdFZhbHVlKENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IG1hc2spCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE1ICs2OSw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBXRUJLSVRf
UkVHSU9OX1JVTEU7IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBJTVBPUlRfUlVMRTsgfQogCi0gICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRSdWxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGFyZW50UnVsZSgpLT5jc3NQYXJzZXJNb2RlKCk7Ci0gICAgICAgIGlmIChwYXJlbnRT
dHlsZVNoZWV0KCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50U3R5bGVTaGVldCgpLT5jc3NQ
YXJzZXJNb2RlKCk7Ci0gICAgICAgIHJldHVybiBDU1NTdHJpY3RNb2RlOwotICAgIH0KLQogICAg
IHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogICAg
IHsKICAgICAgICAgbV9wYXJlbnRJc1J1bGUgPSBmYWxzZTsKQEAgLTEwMiwxMyArOTMsNiBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgS1VSTCBiYXNlVVJMKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVu
dFN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaGVldC0+YmFzZVVSTCgp
OwotICAgICAgICByZXR1cm4gS1VSTCgpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIENTU1J1
bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBUeXBlIHR5cGUpCiAgICAgICAgIDogbV9oYXNDYWNo
ZWRTZWxlY3RvclRleHQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Q1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVj
dG9yKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisgICAgdm9pZCBhZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
Q1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwogCiAgICAg
dm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0g
ZmFsc2UpOwogICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rvciwg
Ym9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKQEAgLTI4NSwxMyArMjg1LDEzIEBAIHN0YXRp
YyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0
eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIFJ1bGVTZXQq
IGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogZGVmYXVsdFN0eWxlU2hlZXQ7
Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogcXVpcmtzU3R5bGVTaGVldDsKLXN0YXRpYyBDU1NTdHls
ZVNoZWV0KiBzdmdTdHlsZVNoZWV0Owotc3RhdGljIENTU1N0eWxlU2hlZXQqIG1hdGhNTFN0eWxl
U2hlZXQ7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci1z
dGF0aWMgQ1NTU3R5bGVTaGVldCogZnVsbHNjcmVlblN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVT
aGVldEludGVybmFsKiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0
SW50ZXJuYWwqIGRlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
cXVpcmtzU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hl
ZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Oworc3RhdGlj
IFN0eWxlU2hlZXRJbnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CitzdGF0aWMgU3R5
bGVTaGVldEludGVybmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKIAogUmVuZGVyU3R5bGUqIENT
U1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTM5OSw3ICszOTks
NyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAKICAgICAvLyBG
SVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEK
ICAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwot
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBhZ2VVc2Vy
U2hlZXQoKSkKKyAgICBpZiAoU3R5bGVTaGVldEludGVybmFsKiBwYWdlVXNlclNoZWV0ID0gZG9j
dW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkKICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQocGFnZVVzZXJTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICBhZGRBdXRob3JS
dWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5wYWdlR3JvdXBVc2Vy
U2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKICAgICBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RV
c2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5kb2N1bWVudFVzZXJTaGVldHMoKSwgKnRlbXBV
c2VyU3R5bGUpOwpAQCAtNDE4LDE0ICs0MTgsMTQgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3RvcihEb2N1bQogICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIGRvY3VtZW50
LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkK
K3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVz
RnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogdXNl
clNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQogewogICAgIGlmICghdXNlclNoZWV0cykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdXNlclNoZWV0cy0+c2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBj
b25zdCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7Cisg
ICAgICAgIGNvbnN0IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+JiBzaGVldCA9IHVzZXJTaGVl
dHMtPmF0KGkpOwogICAgICAgICBpZiAoc2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSkKICAgICAg
ICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVt
LCB0aGlzKTsKICAgICAgICAgZWxzZQpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKCkKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci1jb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTY29wZShj
b25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKK2NvbnN0IENvbnRhaW5lck5vZGUqIENTU1N0eWxl
U2VsZWN0b3I6OmRldGVybWluZVNjb3BlKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQp
CiB7CiAgICAgQVNTRVJUKHNoZWV0KTsKIApAQCAtNTA0LDE3ICs1MDQsMTggQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZQogICAgICAgICBpZiAoIXN0eWxlc2hlZXRz
W2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9
IGRldGVybWluZVNjb3BlKGNzc1NoZWV0KTsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgPSBkZXRlcm1pbmVTY29wZShzaGVldCk7CiAgICAgICAgIGlmIChzY29wZSkgewogICAg
ICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIGlm
ICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVl
dCk7CiAgICAgfQpAQCAtNjgwLDE0ICs2ODEsMTQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6Y2xlYXIoKQogICAgIHVzZXNMaW5rUnVsZXMgPSBmYWxzZTsKIH0KIAotc3RhdGlj
IENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKK3N0YXRpYyBT
dHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIHsKLSAg
ICBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpLmxlYWtSZWYo
KTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQorICAgIFN0eWxlU2hlZXRJbnRlcm5hbCog
c2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgLy8gbGVhayB0
aGUgc2hlZXQgb24gcHVycG9zZQogICAgIHNoZWV0LT5wYXJzZVN0cmluZyhzdHIpOwogICAgIHJl
dHVybiBzaGVldDsKIH0KIAotc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQorc3RhdGljIFN0eWxlU2hlZXRJbnRl
cm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUp
CiB7CiAgICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVycywgc2l6ZSkpOwog
fQpAQCAtMjIzNyw3ICsyMjM4LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lv
blNlbGVjdAogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxlU2hlZXQqIHN0eWxl
c2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpkZXRl
cm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNo
ZWV0LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykKIHsKICAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlz
TG9hZGluZygpKTsKIApAQCAtMjQ2Miw3ICsyNDYzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSZWdp
b25SdWxlKFN0eWxlUnVsZVJlZwogICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBw
ZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3Qo
KSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dEludGVybmFsKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NT
dHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkK
IHsKICAgICBBU1NFUlQoc2hlZXQpOwogCkBAIC0yOTAzLDcgKzI5MDQsMTYgQEAgc3RhdGljIHZv
aWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQg
Y29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVS
dWxlPiA+JiB3cmFwcGVyTWFwLCBEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMgdm9pZCBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+
ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3Jh
cHBlclNldCwgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5
bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzdHls
ZVNoZWV0V3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KTsKKyAgICBz
aGVldFdyYXBwZXJTZXQuYWRkKHN0eWxlU2hlZXRXcmFwcGVyKTsKKyAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENT
U1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNo
ZWV0cygpLT52ZWN0b3IoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVl
dHMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5MTIsMjEgKzI5MjIsMjEgQEAgc3RhdGljIHZvaWQgY29s
bGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihzdHlsZVNoZWV0KSk7CiAgICAgfQotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBw
ZXJNYXAsIGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpOworICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKHdyYXBwZXJNYXAsIHNoZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQo
KSk7CiB9CiAKIENTU1N0eWxlUnVsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZW5zdXJlRnVsbENTU09N
V3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIHNpbXBsZURlZmF1bHRTdHlsZVNo
ZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3Jh
cHBlck1hcCwgZGVmYXVsdFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBxdWlya3NTdHlsZVNoZWV0KTsKLSAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgc3Zn
U3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAsIG1hdGhNTFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdy
YXBwZXJNYXAsIGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgZGVmYXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQsIHF1aXJrc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0
eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHN2
Z1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRv
Q1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIG1hdGhNTFN0eWxl
U2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIG1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBmdWxsc2NyZWVuU3R5bGVT
aGVldCk7CiAKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgZG9jdW1lbnQoKSk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwg
ZG9jdW1lbnQoKSk7CiAgICAgfQogICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLmdldChydWxlKS5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBjbGFzcyBTdHlsZVJ1
bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOwogY2xhc3MgU3R5bGVTaGFkZXI7CiBjbGFz
cyBTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFsOwogY2xhc3MgU3R5bGVTaGVl
dExpc3Q7CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7
CkBAIC0xNTYsNyArMTU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVz
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYpOwogICAgIAogICAgIC8vIEZpbmQgdGhlIGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMg
b24gYSBzdHlsZXNoZWV0IGFyZSBzY29wZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0
byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhl
IHNjb3BlLgotICAgIHN0YXRpYyBib29sIGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3Bl
cyhDU1NTdHlsZVNoZWV0KiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOworICAgIHN0YXRpYyBib29s
IGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0SW50ZXJuYWwqLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVS
ZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKQEAgLTM5OSw3ICs0MDAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0
YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAotICAgIHZvaWQgYWRk
QXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOworICAgIHZvaWQgYWRk
QXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiosIFJ1bGVTZXQmIHVzZXJTdHlsZSk7CiAKICAgICB2
b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCkBAIC00OTYsMTMgKzQ5NywxNCBAQCBw
cml2YXRlOgogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5
OwogICAgIAogICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBt
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOworICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OwogCiAjaWYgRU5BQkxFKENTU19T
SEFERVJTKQogICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKLSAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJt
aW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCopOworICAgIHN0YXRpYyBjb25zdCBDb250YWlu
ZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4g
U2NvcGVkUnVsZVNldE1hcDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC03NCw5ICs3NCwxMSBAQCBzdGF0aWMgYm9vbCBpc0FjY2VwdGFi
bGVDU1NTdHlsZVNoZWV0UGFyCiB9CiAjZW5kaWYKIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVT
aGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJh
c2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9k
ZSwgaHJlZiwgYmFzZVVSTCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFs
KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBtX293bmVyTm9kZShwYXJl
bnROb2RlKQogICAgICwgbV9vd25lclJ1bGUoMCkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQogICAgICwgbV9jaGFyc2V0KGNoYXJz
ZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX2Nzc1BhcnNlck1vZGUo
Q1NTUXVpcmtzTW9kZSkKQEAgLTg3LDI1ICs4OSwyNyBAQCBDU1NTdHlsZVNoZWV0OjpDU1NTdHls
ZVNoZWV0KE5vZGUqIHBhcmVuCiAgICAgQVNTRVJUKGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQ
YXJlbnQocGFyZW50Tm9kZSkpOwogfQogCi1DU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFN0
eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwm
IGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IFN0eWxlU2hlZXQoaHJlZiwg
YmFzZVVSTCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVs
ZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIDogbV9vd25lck5vZGUoMCkK
ICAgICAsIG1fb3duZXJSdWxlKG93bmVyUnVsZSkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQogICAgICwgbV9jaGFyc2V0KGNoYXJz
ZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX2Nzc1BhcnNlck1vZGUo
KG93bmVyUnVsZSAmJiBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSkgPyBvd25lclJ1bGUt
PnBhcmVudFN0eWxlU2hlZXQoKS0+Y3NzUGFyc2VyTW9kZSgpIDogQ1NTU3RyaWN0TW9kZSkKICAg
ICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKHRydWUpCiAgICAgLCBtX2RpZExv
YWRFcnJvck9jY3VyKGZhbHNlKQogewotICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0g
b3duZXJSdWxlID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOworICAgIFN0eWxl
U2hlZXRJbnRlcm5hbCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKSA6IDA7CiAgICAgbV9pc1VzZXJTdHlsZVNoZWV0ID0gcGFyZW50U2hlZXQg
PyBwYXJlbnRTaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpIDogZmFsc2U7CiB9CiAKLUNTU1N0eWxl
U2hlZXQ6On5DU1NTdHlsZVNoZWV0KCkKK1N0eWxlU2hlZXRJbnRlcm5hbDo6flN0eWxlU2hlZXRJ
bnRlcm5hbCgpCiB7CiAgICAgY2xlYXJSdWxlcygpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6
OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlKQordm9pZCBT
dHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBydWxlKQogewogICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKICAgICBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKQEAgLTExOCwyNCArMTIyLDI0IEBAIHZvaWQgQ1NT
U3R5bGVTaGVldDo6cGFyc2VyQXBwZW5kUnVsZShQYXMKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5k
KHJ1bGUpOwogfQogCi1QYXNzUmVmUHRyPENTU1J1bGU+IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUNo
aWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCkKK1Bhc3NSZWZQdHI8Q1NTUnVsZT4g
U3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQg
aW5kZXgsIENTU1N0eWxlU2hlZXQqIHBhcmVudFdyYXBwZXIpCiB7Ci0gICAgQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IHJ1bGVDb3VudCgpKTsKICAgICAKICAg
ICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0NoYXJzZXRS
dWxlKCkpIHsKICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICByZXR1cm4gQ1NT
Q2hhcnNldFJ1bGU6OmNyZWF0ZSh0aGlzLCBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlKTsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHBhcmVudFdyYXBwZXIsIG1f
ZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOwogICAgICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7CiAg
ICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NP
TVdyYXBwZXIodGhpcyk7CisgICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9y
SW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CiAgICAgCiAgICAgY2hp
bGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKLSAgICByZXR1cm4gbV9jaGls
ZFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIodGhpcyk7CisgICAg
cmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y3JlYXRlQ1NTT01XcmFwcGVy
KHBhcmVudFdyYXBwZXIpOwogfQogCi11bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjpsZW5ndGgoKSBj
b25zdAordW5zaWduZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKSBjb25zdAogewog
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgcmVzdWx0ICs9IGhhc0NoYXJzZXRSdWxlKCkg
PyAxIDogMDsKQEAgLTE0NCwzOCArMTQ4LDEzIEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omxl
bmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1NTUnVsZSogQ1NTU3R5bGVT
aGVldDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBs
ZW5ndGgoKTsKLSAgICBpZiAoaW5kZXggPj0gcnVsZUNvdW50KQotICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmdyb3cocnVsZUNvdW50KTsKLSAgICBBU1NFUlQo
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBydWxlQ291bnQpOwotCi0gICAgUmVm
UHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XTsK
LSAgICBpZiAoIWNzc1J1bGUpCi0gICAgICAgIGNzc1J1bGUgPSBjcmVhdGVDaGlsZFJ1bGVDU1NP
TVdyYXBwZXIoaW5kZXgpOwotICAgIHJldHVybiBjc3NSdWxlLmdldCgpOwotfQotCi12b2lkIENT
U1N0eWxlU2hlZXQ6OmNsZWFyQ2hhcnNldFJ1bGUoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6
OmNsZWFyQ2hhcnNldFJ1bGUoKQogewogICAgIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUgPSBT
dHJpbmcoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhclJ1bGVzKCkKK3ZvaWQgU3R5
bGVTaGVldEludGVybmFsOjpjbGVhclJ1bGVzKCkKIHsKLSAgICAvLyBGb3Igc3R5bGUgcnVsZXMg
b3V0c2lkZSB0aGUgZG9jdW1lbnQsIC5wYXJlbnRTdHlsZVNoZWV0IGNhbiBiZWNvbWUgbnVsbCBl
dmVuIGlmIHRoZSBzdHlsZSBydWxlCi0gICAgLy8gaXMgc3RpbGwgb2JzZXJ2YWJsZSBmcm9tIEph
dmFTY3JpcHQuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgLnBhcmVudE5vZGUgZm9yIG5v
ZGVzLCBidXQKLSAgICAvLyBpdCdzIG5vdCBpZGVhbCBiZWNhdXNlIGl0IG1ha2VzIHRoZSBDU1NP
TSdzIGJlaGF2aW9yIGRlcGVuZCBvbiB0aGUgdGltaW5nIG9mIGdhcmJhZ2UgY29sbGVjdGlvbi4K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCi0g
ICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0tPnNldFBhcmVudFN0eWxlU2hl
ZXQoMCk7Ci0gICAgfQotICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5jbGVhcigpOwotCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgQVNTRVJUKG1faW1wb3J0UnVsZXMuYXQoaSktPnBhcmVudFN0eWxlU2hlZXQoKSA9
PSB0aGlzKTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tpXS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0
KCk7CkBAIC0xODUsNDUgKzE2NCwxNiBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyUnVsZXMo
KQogICAgIGNsZWFyQ2hhcnNldFJ1bGUoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpwYXJz
ZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQordm9p
ZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7CiAgICAgLy8gUGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhl
cmUgaXMgZXZlciBvbmx5IG9uZSBAY2hhcnNldC4KICAgICBBU1NFUlQobV9lbmNvZGluZ0Zyb21D
aGFyc2V0UnVsZS5pc051bGwoKSk7CiAgICAgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSA9IGVu
Y29kaW5nOyAKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVs
ZXMoKQotewotICAgIEtVUkwgdXJsID0gZmluYWxVUkwoKTsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBmaW5kRG9jdW1lbnQoKTsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQg
JiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIC8vIElFIGJlaGF2aW9yLgotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxl
TGlzdD4gbm9uQ2hhcnNldFJ1bGVzID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAg
IHVuc2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlQ291bnQ7ICsraSkgewotICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsK
LSAgICAgICAgaWYgKHJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBub25DaGFyc2V0UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOwotICAgIH0K
LSAgICByZXR1cm4gbm9uQ2hhcnNldFJ1bGVzLnJlbGVhc2UoKTsKLX0KLQotdW5zaWduZWQgQ1NT
U3R5bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVk
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFw
cGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGlu
ZGV4KQogewotICAgIGVjID0gMDsKLSAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgQ1NT
UGFyc2VyIHAoY3NzUGFyc2VyTW9kZSgpKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVs
ZSA9IHAucGFyc2VSdWxlKHRoaXMsIHJ1bGVTdHJpbmcpOwotCi0gICAgaWYgKCFydWxlKSB7Ci0g
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFT
U0VSVChpbmRleCA8PSBydWxlQ291bnQoKSk7CiAgICAgLy8gUGFyc2VyOjpwYXJzZVJ1bGUgZG9l
c24ndCBjdXJyZW50bHkgYWxsb3cgQGNoYXJzZXQgc28gd2UgZG9uJ3QgbmVlZCB0byBkZWFsIHdp
dGggaXQuCiAgICAgQVNTRVJUKCFydWxlLT5pc0NoYXJzZXRSdWxlKCkpOwogICAgIApAQCAtMjMy
LDEwMCArMTgyLDU4IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QK
ICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0b3JJbmRl
eCA9PSAwKSB7CiAgICAgICAgICAgICAvLyBOb3RoaW5nIGNhbiBiZSBpbnNlcnRlZCBiZWZvcmUg
QGNoYXJzZXQuCi0gICAgICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkVmVj
dG9ySW5kZXggPCBtX2ltcG9ydFJ1bGVzLnNpemUoKSB8fCAoY2hpbGRWZWN0b3JJbmRleCA9PSBt
X2ltcG9ydFJ1bGVzLnNpemUoKSAmJiBydWxlLT5pc0ltcG9ydFJ1bGUoKSkpIHsKICAgICAgICAg
Ly8gSW5zZXJ0aW5nIG5vbi1pbXBvcnQgcnVsZSBiZWZvcmUgQGltcG9ydCBpcyBub3QgYWxsb3dl
ZC4KLSAgICAgICAgaWYgKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewotICAgICAgICAgICAgZWMg
PSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtX2ltcG9ydFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPihydWxlLmdldCgpKSk7CiAgICAgICAgIG1faW1w
b3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPnJlcXVlc3RTdHlsZVNoZWV0KCk7Ci0gICAgICAg
IGdvdG8gc3VjY2VzczsKKyAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1
YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBs
b2FkZWQuCisgICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9y
dCBydWxlIGlzIG5vdCBhbGxvd2VkLgotICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewot
ICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQorICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAgCi0gICAg
bV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlLnJlbGVhc2UoKSk7Cisg
ICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKICAgICAKLXN1
Y2Nlc3M6Ci0gICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQotICAg
ICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVs
ZT4oKSk7Ci0KLSAgICAvLyBGSVhNRTogU3R5bGVzaGVldCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5n
ZSBtZWFuaW5nZnVsbHkgYmVmb3JlIHRoZSBpbXBvcnRlZCBzaGVldHMgYXJlIGxvYWRlZC4KICAg
ICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwotICAgIHJldHVybiBpbmRleDsKLX0KLQotaW50IENTU1N0
eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBz
dHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnNlcnRSdWxlKHNl
bGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIgfSIsIGluZGV4LCBlYyk7Ci0KLSAgICAvLyBBcyBw
ZXIgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCi0gICAgcmV0dXJu
IC0xOwotfQotCi1pbnQgQ1NTU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBjb25zdCBTdHJpbmcmIHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1
cm4gYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUsIGxlbmd0aCgpLCBlYyk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVz
KCkKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCkKIHsKLSAgICBLVVJMIHVybCA9IGZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZmluZERvY3VtZW50KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50
ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1f
cnVsZUxpc3RDU1NPTVdyYXBwZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0
KHRoaXMpKTsKLSAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKLX0KKyAg
ICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVs
ZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZWMgPSAwOwogICAgIHVuc2lnbmVkIGNoaWxkVmVj
dG9ySW5kZXggPSBpbmRleDsKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBp
ZiAoY2hpbGRWZWN0b3JJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxl
KCk7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAgICAgICBzdHlsZVNoZWV0Q2hh
bmdlZCgpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC0tY2hpbGRW
ZWN0b3JJbmRleDsKICAgICB9CiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1
bGVzLnNpemUoKSkgewogICAgICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5j
bGVhclBhcmVudFN0eWxlU2hlZXQoKTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5yZW1vdmUoY2hp
bGRWZWN0b3JJbmRleCk7Ci0gICAgICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgc3R5bGVTaGVl
dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4
IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGls
ZFZlY3RvckluZGV4KTsKLQotc3VjY2VzczoKLSAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
bmRleF0pCi0gICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdLT5zZXRQ
YXJlbnRTdHlsZVNoZWV0KDApOwotICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMucmVt
b3ZlKGluZGV4KTsKLSAgICB9Ci0KICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQogCi12b2lk
IENTU1N0eWxlU2hlZXQ6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKK3ZvaWQgU3R5bGVTaGVldElu
dGVybmFsOjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKHVyaS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDcgKzI0Niw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6
YWRkTmFtZXNwYWNlKENTU1BhcnMKICAgICAgICAgcC0+bV9kZWZhdWx0TmFtZXNwYWNlID0gdXJp
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVybWluZU5hbWVz
cGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgU3R5
bGVTaGVldEludGVybmFsOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgpCiB7CiAgICAgaWYgKHByZWZpeC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxB
dG9tOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVz
cGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCkBAIC0zNTEsMTIgKzI1OSwxMiBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVyCiAgICAgcmV0dXJuIG51bGxBdG9tOyAvLyBB
c3N1bWUgd2Ugd29uJ3QgbWF0Y2ggYW55IG5hbWVzcGFjZXMuCiB9CiAKLWJvb2wgQ1NTU3R5bGVT
aGVldDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKK2Jvb2wgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZyhjb25zdCBT
dHJpbmcgJnN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIHJldHVy
biBwYXJzZVN0cmluZ0F0TGluZShzdHJpbmcsIGNzc1BhcnNlck1vZGUsIDApOwogfQogCi1ib29s
IENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nQXRMaW5lKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIGludCBzdGFydExpbmVOdW1iZXIpCitib29sIFN0
eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VTdHJpbmdBdExpbmUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgaW50IHN0YXJ0TGluZU51bWJlcikKIHsKICAg
ICBzZXRDU1NQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwogICAgIENTU1BhcnNlciBwKGNzc1Bh
cnNlck1vZGUpOwpAQCAtMzY0LDcgKzI3Miw3IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6cGFyc2VT
dHJpbmdBdExpbmUoY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NTdHlsZVNoZWV0
Ojppc0xvYWRpbmcoKQorYm9vbCBTdHlsZVNoZWV0SW50ZXJuYWw6OmlzTG9hZGluZygpIGNvbnN0
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgaWYgKG1faW1wb3J0UnVsZXNbaV0tPmlzTG9hZGluZygpKQpAQCAtMzcz
LDcgKzI4MSw3IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQordm9pZCBTdHls
ZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKCkKIHsKICAgICBpZiAoaXNMb2FkaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM4MSw4ICsyODksOCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmNo
ZWNrTG9hZGVkKCkKICAgICAvLyBBdm9pZCB8dGhpc3wgYmVpbmcgZGVsZXRlZCBieSBzY3JpcHRz
IHRoYXQgcnVuIHZpYQogICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNj
cmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzY2MjIzMDA+LgotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBwcm90ZWN0b3IodGhpcyk7Ci0g
ICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCisg
ICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gcHJvdGVjdG9yKHRoaXMpOworICAgIGlmIChT
dHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCiAgICAg
ICAgIHN0eWxlU2hlZXQtPmNoZWNrTG9hZGVkKCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gb3duZXIg
PSBvd25lck5vZGUoKTsKQEAgLTM5NSw1MCArMzAzLDQzIEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6
Y2hlY2tMb2FkZWQoKQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0Ojpub3RpZnlMb2Fk
ZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBzaGVldCkKK3ZvaWQgU3R5bGVTaGVl
dEludGVybmFsOjpub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBz
aGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQpOwogICAgIG1fZGlkTG9hZEVycm9yT2NjdXIgfD0g
c2hlZXQtPmVycm9yT2NjdXJyZWQoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzdGFydExv
YWRpbmdEeW5hbWljU2hlZXQoKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnN0YXJ0TG9hZGlu
Z0R5bmFtaWNTaGVldCgpCiB7CiAgICAgaWYgKE5vZGUqIG93bmVyID0gb3duZXJOb2RlKCkpCiAg
ICAgICAgIG93bmVyLT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAotTm9kZSogQ1NT
U3R5bGVTaGVldDo6ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKSBjb25zdAorTm9kZSogU3R5bGVT
aGVldEludGVybmFsOjpmaW5kU3R5bGVTaGVldE93bmVyTm9kZSgpIGNvbnN0CiB7Ci0gICAgZm9y
IChjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IHRoaXM7IHNoZWV0OyBzaGVldCA9IHNoZWV0
LT5wYXJlbnRTdHlsZVNoZWV0KCkpIHsKKyAgICBmb3IgKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5h
bCogc2hlZXQgPSB0aGlzOyBzaGVldDsgc2hlZXQgPSBzaGVldC0+cGFyZW50U3R5bGVTaGVldCgp
KSB7CiAgICAgICAgIGlmIChOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAot
RG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmZpbmREb2N1bWVudCgpCitEb2N1bWVudCogU3R5bGVT
aGVldEludGVybmFsOjpmaW5kRG9jdW1lbnQoKQogewogICAgIE5vZGUqIG93bmVyTm9kZSA9IGZp
bmRTdHlsZVNoZWV0T3duZXJOb2RlKCk7CiAKICAgICByZXR1cm4gb3duZXJOb2RlID8gb3duZXJO
b2RlLT5kb2N1bWVudCgpIDogMDsKIH0KLSAgICAKLU1lZGlhTGlzdCogQ1NTU3R5bGVTaGVldDo6
bWVkaWEoKSBjb25zdCAKLXsgCi0gICAgaWYgKCFtX21lZGlhUXVlcmllcykKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLT5lbnN1cmVNZWRpYUxpc3QoY29uc3Rf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4odGhpcykpOwotfQogCi12b2lkIENTU1N0eWxlU2hlZXQ6OnNl
dE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKK3Zv
aWQgU3R5bGVTaGVldEludGVybmFsOjpzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1
ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCiB7CiAgICAgbV9tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJp
ZXM7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5nZWQoKQordm9pZCBT
dHlsZVNoZWV0SW50ZXJuYWw6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKIHsKLSAgICBDU1NTdHlsZVNo
ZWV0KiByb290U2hlZXQgPSB0aGlzOwotICAgIHdoaWxlIChDU1NTdHlsZVNoZWV0KiBwYXJlbnQg
PSByb290U2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHJvb3RTaGVldCA9IHRoaXM7CisgICAgd2hpbGUgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50
ID0gcm9vdFNoZWV0LT5wYXJlbnRTdHlsZVNoZWV0KCkpCiAgICAgICAgIHJvb3RTaGVldCA9IHBh
cmVudDsKIAogICAgIC8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhpbmcgdXBk
YXRlU3R5bGVTZWxlY3RvciBkb2VzLApAQCAtNDQ4LDggKzM0OSwxOSBAQCB2b2lkIENTU1N0eWxl
U2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50VG9V
cGRhdGUgPSByb290U2hlZXQtPmZpbmREb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudFRvVXBk
YXRlLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KKyAgICAKK0tV
UkwgU3R5bGVTaGVldEludGVybmFsOjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlu
YWxVUkwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2ZpbmFsVVJMOworICAgIGlmIChTdHls
ZVNoZWV0SW50ZXJuYWwqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQorICAgICAg
ICByZXR1cm4gcGFyZW50U2hlZXQtPmJhc2VVUkwoKTsKKyAgICBpZiAoIW1fb3duZXJOb2RlKQor
ICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBtX293bmVyTm9kZS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpOworfQogCi1LVVJMIENTU1N0eWxlU2hlZXQ6OmNvbXBsZXRlVVJMKGNvbnN0
IFN0cmluZyYgdXJsKSBjb25zdAorS1VSTCBTdHlsZVNoZWV0SW50ZXJuYWw6OmNvbXBsZXRlVVJM
KGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogewogICAgIC8vIEFsd2F5cyByZXR1cm4gYSBudWxs
IFVSTCB3aGVuIHBhc3NlZCBhIG51bGwgc3RyaW5nLgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
Y2hhbmdlIHRoZSBLVVJMIGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KQEAgLTQ2
MiwxMyArMzc0LDEzIEBAIEtVUkwgQ1NTU3R5bGVTaGVldDo6Y29tcGxldGVVUkwoY29uc3QgU3QK
ICAgICByZXR1cm4gS1VSTChiYXNlVVJMKCksIHVybCwgZW5jb2RpbmcpOwogfQogCi12b2lkIENT
U1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1
cmxzKQordm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiB1cmxzKQogewotICAgIERlcXVlPENTU1N0eWxlU2hlZXQqPiBzdHls
ZVNoZWV0UXVldWU7CisgICAgRGVxdWU8U3R5bGVTaGVldEludGVybmFsKj4gc3R5bGVTaGVldFF1
ZXVlOwogICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQodGhpcyk7CiAKICAgICB3aGlsZSAoIXN0
eWxlU2hlZXRRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgU3R5bGVTaGVldElu
dGVybmFsKiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VGaXJzdCgpOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPm1faW1wb3J0
UnVsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFN0eWxlUnVsZUltcG9ydCogaW1wb3J0
UnVsZSA9IHN0eWxlU2hlZXQtPm1faW1wb3J0UnVsZXNbaV0uZ2V0KCk7CkBAIC00ODcsMjUgKzM5
OSwxNjAgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjphZGRTdWJyZXNvdXJjZVN0eWxlVQogICAgIH0K
IH0KIAotQ1NTSW1wb3J0UnVsZSogQ1NTU3R5bGVTaGVldDo6ZW5zdXJlQ1NTT01XcmFwcGVyKFN0
eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSkKK1N0eWxlU2hlZXRJbnRlcm5hbCogU3R5bGVTaGVl
dEludGVybmFsOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKIHsKLSAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgIGlmICht
X2ltcG9ydFJ1bGVzW2ldID09IGltcG9ydFJ1bGUpCi0gICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKGkpKTsKLSAgICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3du
ZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwogfQogCi1DU1NJbXBvcnRSdWxlKiBDU1NT
dHlsZVNoZWV0Ojpvd25lclJ1bGUoKSBjb25zdCAKLXsgIAotICAgIHJldHVybiBwYXJlbnRTdHls
ZVNoZWV0KCkgPyBwYXJlbnRTdHlsZVNoZWV0KCktPmVuc3VyZUNTU09NV3JhcHBlcihtX293bmVy
UnVsZSkgOiAwOyAKK0NTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHls
ZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSkKKyAg
ICA6IG1faW50ZXJuYWwoc3R5bGVTaGVldCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKKyAg
ICAsIG1fb3duZXJSdWxlKG93bmVyUnVsZSkKK3sKIH0KIAotQ1NTU3R5bGVTaGVldCogQ1NTU3R5
bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CitDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5
bGVTaGVldCgpCiB7Ci0gICAgQVNTRVJUKGlzQ1NTU3R5bGVTaGVldCgpKTsKLSAgICByZXR1cm4g
bV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKKyAgICAv
LyBGb3Igc3R5bGUgcnVsZXMgb3V0c2lkZSB0aGUgZG9jdW1lbnQsIC5wYXJlbnRTdHlsZVNoZWV0
IGNhbiBiZWNvbWUgbnVsbCBldmVuIGlmIHRoZSBzdHlsZSBydWxlCisgICAgLy8gaXMgc3RpbGwg
b2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2Yg
LnBhcmVudE5vZGUgZm9yIG5vZGVzLCBidXQKKyAgICAvLyBpdCdzIG5vdCBpZGVhbCBiZWNhdXNl
IGl0IG1ha2VzIHRoZSBDU1NPTSdzIGJlaGF2aW9yIGRlcGVuZCBvbiB0aGUgdGltaW5nIG9mIGdh
cmJhZ2UgY29sbGVjdGlvbi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1
bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnNbaV0pCisgICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0t
PnNldFBhcmVudFN0eWxlU2hlZXQoMCk7CisgICAgfQorfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6
OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit7IAorICAgIGlmIChkaXNhYmxlZCA9PSBtX2lz
RGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzRGlzYWJsZWQgPSBkaXNhYmxlZDsg
CisgICAgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsKK30KKwordW5zaWduZWQgQ1NT
U3R5bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+cnVs
ZUNvdW50KCk7Cit9CisKK0NTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWduZWQgaW5k
ZXgpCit7CisgICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3RoKCk7CisgICAgaWYgKGluZGV4
ID49IHJ1bGVDb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
Lmdyb3cocnVsZUNvdW50KTsKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNp
emUoKSA9PSBydWxlQ291bnQpOworICAgIAorICAgIFJlZlB0cjxDU1NSdWxlPiYgY3NzUnVsZSA9
IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF07CisgICAgaWYgKCFjc3NSdWxlKQorICAg
ICAgICBjc3NSdWxlID0gbV9pbnRlcm5hbC0+Y3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVyKGlu
ZGV4LCB0aGlzKTsKKyAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVsZXMoKQoreworICAgIEtVUkwgdXJsID0gbV9p
bnRlcm5hbC0+ZmluYWxVUkwoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ludGVybmFs
LT5maW5kRG9jdW1lbnQoKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYg
IWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIC8vIElFIGJlaGF2aW9yLgorICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlz
dD4gbm9uQ2hhcnNldFJ1bGVzID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgIHVu
c2lnbmVkIHJ1bGVDb3VudCA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBydWxlQ291bnQ7ICsraSkgeworICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsKKyAg
ICAgICAgaWYgKHJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBub25DaGFyc2V0UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOworICAgIH0KKyAg
ICByZXR1cm4gbm9uQ2hhcnNldFJ1bGVzLnJlbGVhc2UoKTsKK30KKwordW5zaWduZWQgQ1NTU3R5
bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVkIGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1f
aW50ZXJuYWwtPnJ1bGVDb3VudCgpKTsKKworICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPiBs
ZW5ndGgoKSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgQ1NTUGFyc2VyIHAobV9pbnRlcm5hbC0+Y3NzUGFyc2VyTW9kZSgpKTsK
KyAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSA9IHAucGFyc2VSdWxlKG1faW50ZXJuYWwu
Z2V0KCksIHJ1bGVTdHJpbmcpOworCisgICAgaWYgKCFydWxlKSB7CisgICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGJvb2wgc3VjY2VzcyA9IG1f
aW50ZXJuYWwtPndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0gICAgICAgIAorICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmluc2VydChpbmRleCwg
UmVmUHRyPENTU1J1bGU+KCkpOworICAgIHJldHVybiBpbmRleDsKK30KKwordm9pZCBDU1NTdHls
ZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1faW50ZXJuYWwtPnJ1bGVDb3VudCgpKTsKKwor
ICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpIHsKKyAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ludGVybmFsLT53
cmFwcGVyRGVsZXRlUnVsZShpbmRleCk7CisKKyAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
bmRleF0pCisgICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdLT5zZXRQ
YXJlbnRTdHlsZVNoZWV0KDApOworICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMucmVt
b3ZlKGluZGV4KTsKKyAgICB9Cit9CisKK2ludCBDU1NTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsgc3R5bGUg
KyAiIH0iLCBpbmRleCwgZWMpOworICAgIAorICAgIC8vIEFzIHBlciBNaWNyb3NvZnQgZG9jdW1l
bnRhdGlvbiwgYWx3YXlzIHJldHVybiAtMS4KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBDU1NT
dHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYg
c3R5bGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBhZGRSdWxlKHNlbGVjdG9y
LCBzdHlsZSwgbGVuZ3RoKCksIGVjKTsKK30KKworCitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBD
U1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBtX2ludGVybmFsLT5m
aW5hbFVSTCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faW50ZXJuYWwtPmZpbmREb2N1
bWVudCgpOworICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFtX3J1bGVMaXN0Q1NTT01XcmFwcGVyKQorICAgICAgICBtX3J1bGVMaXN0Q1NTT01X
cmFwcGVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2hlZXRDU1NSdWxlTGlzdCh0aGlzKSk7CisgICAg
cmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7Cit9CisKK01lZGlhTGlzdCogQ1NT
U3R5bGVTaGVldDo6bWVkaWEoKSBjb25zdCAKK3sgCisgICAgaWYgKCFtX2ludGVybmFsLT5tZWRp
YVF1ZXJpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1l
ZGlhUXVlcmllcygpLT5lbnN1cmVNZWRpYUxpc3QoY29uc3RfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
dGhpcykpOworfQorCitDU1NTdHlsZVNoZWV0KiBDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCkgOiAwOyAKK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhckNo
aWxkUnVsZUNTU09NV3JhcHBlcnMoKQoreworICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5j
bGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDYgKzMxLDcg
QEAgY2xhc3MgQ1NTSW1wb3J0UnVsZTsKIGNsYXNzIENTU1BhcnNlcjsKIGNsYXNzIENTU1J1bGU7
CiBjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVu
dDsKQEAgLTQxLDUzICs0Miw0MSBAQCBzdHJ1Y3QgQ1NTTmFtZXNwYWNlOwogCiB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hl
ZXQgeworY2xhc3MgU3R5bGVTaGVldEludGVybmFsIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVT
aGVldEludGVybmFsPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+
IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hl
ZXQoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSW1wb3J0Kj4oMCksIFN0cmluZygpLCBLVVJMKCksIFN0
cmluZygpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFs
KHN0YXRpY19jYXN0PFN0eWxlUnVsZUltcG9ydCo+KDApLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJp
bmcoKSkpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVh
dGUoTm9kZSogb3duZXJOb2RlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRl
cm5hbD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIFN0cmluZygpLCBLVVJMKCksIFN0cmlu
ZygpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93
bmVyTm9kZSwgU3RyaW5nKCksIEtVUkwoKSwgU3RyaW5nKCkpKTsKICAgICB9Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IGNyZWF0
ZShOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJOb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxV
UkwsIGNoYXJzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50
ZXJuYWwob3duZXJOb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNoYXJzZXQpKTsKICAgICB9
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFN0eWxlUnVsZUlt
cG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBm
aW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNo
ZWV0KG93bmVyUnVsZSwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMLCBjaGFyc2V0KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyUnVsZSwgb3JpZ2lu
YWxVUkwsIGZpbmFsVVJMLCBjaGFyc2V0KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IGNyZWF0ZUlubGluZShOb2RlKiBvd25lck5vZGUsIGNvbnN0IEtVUkwm
IGZpbmFsVVJMKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3Jl
YXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgZmluYWxVUkwpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJOb2RlLCBmaW5h
bFVSTC5zdHJpbmcoKSwgZmluYWxVUkwsIFN0cmluZygpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyTm9kZSwgZmluYWxVUkwuc3RyaW5nKCks
IGZpbmFsVVJMLCBTdHJpbmcoKSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU1N0eWxlU2hl
ZXQoKTsKLQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNv
bnN0IE9WRVJSSURFOwotCi0gICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZXMoKTsK
LSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5zaWduZWQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIElFIEV4dGVuc2lvbnMKLSAgICBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlcygpOwotICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5
bGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQorICAgIH5TdHls
ZVNoZWV0SW50ZXJuYWwoKTsKIAogICAgIHZvaWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciosIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgpOwogCiAgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogCi0gICAgdmlydHVh
bCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBDU1NTdHJp
Y3RNb2RlKTsKKyAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1v
ZGUgPSBDU1NTdHJpY3RNb2RlKTsKIAogICAgIGJvb2wgcGFyc2VTdHJpbmdBdExpbmUoY29uc3Qg
U3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSwgaW50IHN0YXJ0TGluZU51bWJlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkaW5nKCk7CisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKIAogICAg
IHZvaWQgY2hlY2tMb2FkZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgp
OwpAQCAtMTE1LDM4ICsxMDQsNTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhclJ1bGVzKCk7
CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBDU1NSdWxlKiBpdGVtKHVuc2ln
bmVkIGluZGV4KTsKLQogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBv
cnQuCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBv
cnRSdWxlczsgfQogCi0gICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgT1ZFUlJJ
REU7Ci0KICAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiBt
X21lZGlhUXVlcmllcy5nZXQoKTsgfQogICAgIHZvaWQgc2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQ
dHI8TWVkaWFRdWVyeVNldD4pOwogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBD
YWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgCi0gICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBv
d25lclJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVu
dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJldHVy
biBtX293bmVyTm9kZTsgfQorICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJOb2Rl
ID0gMDsgfQorICAgIFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lclJ1bGU7IH0KICAgICB2b2lkIGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVyUnVsZSA9
IDA7IH0KICAgICAKLSAgICBDU1NJbXBvcnRSdWxlKiBlbnN1cmVDU1NPTVdyYXBwZXIoU3R5bGVS
dWxlSW1wb3J0Kik7CisgICAgLy8gTm90ZSB0aGF0IGhyZWYgaXMgdGhlIFVSTCB0aGF0IHN0YXJ0
ZWQgdGhlIHJlZGlyZWN0IGNoYWluIHRoYXQgbGVkIHRvCisgICAgLy8gdGhpcyBzdHlsZSBzaGVl
dC4gVGhpcyBwcm9wZXJ0eSBwcm9iYWJseSBpc24ndCB1c2VmdWwgZm9yIG11Y2ggZXhjZXB0Cisg
ICAgLy8gdGhlIEphdmFTY3JpcHQgYmluZGluZyAod2hpY2ggbmVlZHMgdG8gdXNlIHRoaXMgdmFs
dWUgZm9yIHNlY3VyaXR5KS4KKyAgICBTdHJpbmcgb3JpZ2luYWxVUkwoKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbmFsVVJMOyB9CisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90
aXRsZTsgfQorICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxl
ID0gdGl0bGU7IH0KKyAgICAKKyAgICB2b2lkIHNldEZpbmFsVVJMKGNvbnN0IEtVUkwmIGZpbmFs
VVJMKSB7IG1fZmluYWxVUkwgPSBmaW5hbFVSTDsgfQorICAgIGNvbnN0IEtVUkwmIGZpbmFsVVJM
KCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFVSTDsgfQorICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0
OwogCi1wcml2YXRlOgotICAgIENTU1N0eWxlU2hlZXQoTm9kZSogb3duZXJOb2RlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KTsKLSAgICBDU1NTdHlsZVNoZWV0KFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBj
b25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KTsKKyAgICB1bnNpZ25lZCBydWxlQ291bnQoKSBjb25zdDsKKyAgICAKKyAg
ICBib29sIHdyYXBwZXJJbnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4sIHVuc2ln
bmVkIGluZGV4KTsKKyAgICB2b2lkIHdyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KTsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2NzcyI7
IH0KKyAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcih1
bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3JhcHBlcik7CisKK3ByaXZhdGU6
CisgICAgU3R5bGVTaGVldEludGVybmFsKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7
CisgICAgU3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KTsKICAgICAKICAgICB2b2lkIGNsZWFyQ2hhcnNldFJ1bGUoKTsKICAgICBib29s
IGhhc0NoYXJzZXRSdWxlKCkgY29uc3QgeyByZXR1cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1
bGUuaXNOdWxsKCk7IH0KIAotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxl
Q1NTT01XcmFwcGVyKHVuc2lnbmVkIGluZGV4KTsKLQorICAgIE5vZGUqIG1fb3duZXJOb2RlOwog
ICAgIFN0eWxlUnVsZUltcG9ydCogbV9vd25lclJ1bGU7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5h
bFVSTDsKKyAgICBLVVJMIG1fZmluYWxVUkw7CisgICAgU3RyaW5nIG1fdGl0bGU7CisKICAgICBT
dHJpbmcgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUltcG9ydD4gPiBtX2ltcG9ydFJ1bGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiBtX2NoaWxkUnVsZXM7CkBAIC0xNTksNyArMTYzLDYyIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOwogICAgIGJvb2wgbV9oYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIgOiAxOwogICAgIGJvb2wgbV9kaWRMb2FkRXJyb3JPY2N1ciA6IDE7Cit9
OworCitjbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFBhc3NSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBzaGVldCwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlID0gMCkgCisgICAg
eyAKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LCBvd25l
clJ1bGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DU1NTdHlsZVNoZWV0KCk7CisKKyAgICB2
aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aW50ZXJuYWwtPm93bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBNZWRpYUxpc3QqIG1lZGlhKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1faW50ZXJuYWwtPm9yaWdpbmFsVVJMKCk7IH0gIAorICAgIHZpcnR1YWwgU3Ry
aW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbnRlcm5hbC0+dGl0bGUoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
aXNEaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSBPVkVSUklE
RTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOworICAgIHVu
c2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIAorICAgIC8vIElFIEV4dGVuc2lvbnMKKyAgICBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBydWxlcygpOworICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IGRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQorICAgIAorICAgIC8v
IEZvciBDU1NSdWxlTGlzdC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBDU1NS
dWxlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVy
Tm9kZSgpIE9WRVJSSURFIHsgbV9pbnRlcm5hbC0+Y2xlYXJPd25lck5vZGUoKTsgfQorICAgIHZp
cnR1YWwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9vd25lclJ1bGU7IH0KKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1faW50ZXJuYWwtPmJhc2VVUkwoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xv
YWRpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5pc0xvYWRpbmcoKTsg
fQorICAgIAorICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQor
ICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IG1faW50ZXJuYWwtPnN0eWxlU2hlZXRDaGFu
Z2VkKCk7IH0KKyAgICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgeyByZXR1cm4gbV9pbnRlcm5h
bC0+ZmluZERvY3VtZW50KCk7IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NTT01X
cmFwcGVycygpOworCisgICAgU3R5bGVTaGVldEludGVybmFsKiBpbnRlcm5hbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW50ZXJuYWwuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDU1NTdHlsZVNoZWV0
KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxl
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2Nz
cyI7IH0KKyAgICAKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBtX2ludGVybmFsOwor
ICAgIGJvb2wgbV9pc0Rpc2FibGVkOwogCisgICAgQ1NTSW1wb3J0UnVsZSogbV9vd25lclJ1bGU7
CiAgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1J1bGU+ID4gbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzOwogICAgIG11dGFibGUgT3duUHRyPENTU1J1bGVMaXN0PiBtX3J1bGVMaXN0Q1NTT01X
cmFwcGVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNpb24gMTEzOTAy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBDU1NWYWx1ZTo6VHlwZSBDU1NWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgCiAg
ICAgcmV0dXJuIENTU19DVVNUT007CiB9CiAKLXZvaWQgQ1NTVmFsdWU6OmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KQordm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkK
IHsKICAgICAvLyBUaGlzIHNob3VsZCBnZXQgY2FsbGVkIGZvciBpbnRlcm5hbCBpbnN0YW5jZXMg
b25seS4KICAgICBBU1NFUlQoIWlzQ1NTT01TYWZlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
LmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKICAgICAKIC8v
IEZJWE1FOiBUaGUgY3VycmVudCBDU1NWYWx1ZSBhbmQgc3ViY2xhc3NlcyBzaG91bGQgYmUgdHVy
bmVkIGludG8gaW50ZXJuYWwgdHlwZXMgKFN0eWxlVmFsdWUpLgogLy8gVGhlIGZldyBzdWJ0eXBl
cyB0aGF0IGFyZSBhY3R1YWxseSBleHBvc2VkIGluIENTU09NIGNhbiBiZSBzZWVuIGluIHRoZSBj
bG9uZUZvckNTU09NKCkgZnVuY3Rpb24uCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogCiAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY2xvbmVGb3JDU1NPTSgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IENTU1N0
eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CiAKIHByb3RlY3RlZDoKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NyArMTM2LDcgQEAgU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3VzdG9tQ3NzVGV4dCgpIGNvbgogICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zh
bHVlTGlzdC5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCopOwogICAgIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBj
bG9uZUZvckNTU09NKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBzdHJpbmcsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQor
UGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICAvLyBKdXN0IHdpcGUgb3V0IHRoZSBjYWNoZSBhbmQgc3RhcnQg
cmVidWlsZGluZyBpZiBpdCBnZXRzIHRvbyBiaWcuCiAgICAgY29uc3QgaW50IG1heGltdW1Gb250
RmFjZUNhY2hlU2l6ZSA9IDEyODsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBv
b2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmgJKHJl
dmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENTU1ZhbHVlTGlzdDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIAogY2xhc3MgQ1NT
VmFsdWVQb29sIHsKIHB1YmxpYzoKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRl
Rm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCk7CisgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNyZWF0ZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5
bGVTaGVldCk7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlRm9udEZh
bWlseVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Q1NTSW5oZXJpdGVkVmFs
dWU+IGNyZWF0ZUluaGVyaXRlZFZhbHVlKCkgeyByZXR1cm4gbV9pbmhlcml0ZWRWYWx1ZTsgfQog
ICAgIFBhc3NSZWZQdHI8Q1NTSW5pdGlhbFZhbHVlPiBjcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIG1faW1wbGljaXRJbml0aWFsVmFsdWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCBDU1NW
YWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCiAgICAgcmV0dXJuIGNsb25lZFZh
bHVlLmdldCgpOwogfQogCi1DU1NTdHlsZVNoZWV0KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAorU3R5bGVTaGVldEludGVybmFsKiBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKIHsg
Ci0gICAgcmV0dXJuIGNvbnRleHRTdHlsZVNoZWV0KCk7IAorICAgIENTU1N0eWxlU2hlZXQqIGNz
c1N0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CisgICAgcmV0dXJuIGNzc1N0eWxlU2hl
ZXQgPyBjc3NTdHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMDsKIH0KIAogUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25z
dApAQCAtMzM5LDEzICszNDAsMTMgQEAgdm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9u
OjpkZXJlZgogCiB2b2lkIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5
bGVSZWNhbGMoKQogewotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4
dFN0eWxlU2hlZXQoKSkgeworICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFy
ZW50U3R5bGVTaGVldCgpKSB7CiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBzdHls
ZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNlbGVj
dG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICB9CiB9Ci0gICAgCi1DU1NTdHlsZVNo
ZWV0KiBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpjb250ZXh0U3R5bGVTaGVldCgpIGNv
bnN0CisKK0NTU1N0eWxlU2hlZXQqIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVu
dFN0eWxlU2hlZXQoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhcmVudFJ1bGUgPyBtX3BhcmVu
dFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CiB9CkBAIC0zNjAsNyArMzYxLDcgQEAgdm9p
ZCBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkcwogICAgIHJldHVybjsKIH0KIAot
Q1NTU3R5bGVTaGVldCogSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hl
ZXQoKSBjb25zdAorQ1NTU3R5bGVTaGVldCogSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFy
ZW50U3R5bGVTaGVldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGFyZW50RWxlbWVudCA/IG1f
cGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkgOiAwOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uaAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1Byb3BlcnR5Owot
Y2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9wZXJ0
eVNldDsKK2NsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAK
IGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURl
Y2xhcmF0aW9uIHsKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwg
U3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdCB7
IHJldHVybiAwOyB9CisgICAgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCgp
IGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWYoKSBPVkVSUklERTsKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVy
dHkqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0
eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9CkBAIC05Niw5ICs5NSwxMCBAQCBwcml2YXRl
OgogICAgIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIENT
U1J1bGUqKTsKICAgICB2aXJ0dWFsIH5TdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CiAK
KyAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVS
UklERTsKKwogICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHls
ZVJlY2FsYygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0
eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OwogICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKQEAgLTExNCwxMCArMTE0LDEwIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiBwcml2YXRlOgorICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFy
ZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVu
dCogcGFyZW50RWxlbWVudCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFyZW50RWxlbWVu
dDsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSBPVkVSUklERSB7IG1f
cGFyZW50RWxlbWVudCA9IDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hl
ZXQoKSBjb25zdCBPVkVSUklERTsKICAgICAKICAgICBTdHlsZWRFbGVtZW50KiBtX3BhcmVudEVs
ZW1lbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAko
cmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5
U2V0Ojppc1Byb3BlcnR5SW1wbGljaQogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5p
c0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgU3R5bGVQ
cm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0
U3R5bGVTaGVldCkKIHsKICAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJp
bmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBpbiBib3RoIElFIGFuZCBHZWNrby4KICAgICAv
LyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8gcHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVz
dWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhlIHNhbWUuCkBAIC01MzEsNyArNTMxLDcgQEAg
Ym9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3Ry
aW5nJiBzdHlsZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkK
K3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0
eWxlRGVjbGFyYXRpb24sIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgbV9wcm9wZXJ0aWVzLmNsZWFyKCk7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihjc3NQYXJz
ZXJNb2RlKCkpOwpAQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVy
Z2UoY29uc3QgU3R5bGUKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIENTU1N0eWxlU2hlZXQq
IGNvbnRleHRTdHlsZVNoZWV0KQordm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgU3R5bGVTaGVldEludGVybmFsKiBj
b250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsK
IGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2hvcnRoYW5kOworY2xh
c3MgU3R5bGVTaGVldEludGVybmFsOwogCiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0IDogcHVibGlj
IFJlZkNvdW50ZWQ8U3R5bGVQcm9wZXJ0eVNldD4gewogcHVibGljOgpAQCAtNjgsNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCkgY29u
c3Q7CiAKICAgICAvLyBUaGVzZSBleHBhbmQgc2hvcnRoYW5kIHByb3BlcnRpZXMgaW50byBtdWx0
aXBsZSBwcm9wZXJ0aWVzLgotICAgIGJvb2wgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgQ1NTU3R5bGVTaGVldCog
Y29udGV4dFN0eWxlU2hlZXQgPSAwKTsKKyAgICBib29sIHNldFByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIFN0eWxlU2hl
ZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQgPSAwKTsKICAgICB2b2lkIHNldFByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCA9IGZh
bHNlKTsKIAogICAgIC8vIFRoZXNlIGRvIG5vdC4gRklYTUU6IFRoaXMgaXMgdG9vIG1lc3N5LCB3
ZSBjYW4gZG8gYmV0dGVyLgpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCByZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHJpbmcqIHJldHVyblRleHQgPSAwKTsK
IAotICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRp
b24sIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICB2b2lkIHBhcnNlRGVj
bGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHlsZVNoZWV0SW50ZXJu
YWwqIGNvbnRleHRTdHlsZVNoZWV0KTsKIAogICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydGllcyhj
b25zdCBDU1NQcm9wZXJ0eSosIGludCBudW1Qcm9wZXJ0aWVzKTsKICAgICB2b2lkIGFkZFBhcnNl
ZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7CkBAIC05MSw3ICs5Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENTU1BhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKSB7
IG1fY3NzUGFyc2VyTW9kZSA9IGNzc1BhcnNlck1vZGU7IH0KICAgICBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDU1NQYXJzZXJNb2RlPiht
X2Nzc1BhcnNlck1vZGUpOyB9CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpOworICAg
IHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBTdHlsZVNo
ZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KTsKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gY29weSgpIGNvbnN0OwogICAgIC8vIFVzZWQgYnkgU3R5bGVkRWxlbWVudDo6
Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMoKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dC5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNDkgKzIwLDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgogCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIk5vZGUuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZVNoZWV0OjpTdHls
ZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0
IEtVUkwmIGZpbmFsVVJMKQotICAgIDogbV9kaXNhYmxlZChmYWxzZSkKLSAgICAsIG1fb3duZXJO
b2RlKHBhcmVudE5vZGUpCi0gICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQotICAgICwg
bV9maW5hbFVSTChmaW5hbFVSTCkKLXsKLX0KLQotU3R5bGVTaGVldDo6U3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCkKLSAgICA6IG1fZGlz
YWJsZWQoZmFsc2UpCi0gICAgLCBtX293bmVyTm9kZSgwKQotICAgICwgbV9vcmlnaW5hbFVSTChv
cmlnaW5hbFVSTCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCi17Ci19Ci0KIFN0eWxlU2hl
ZXQ6On5TdHlsZVNoZWV0KCkKIHsKIH0KIAotS1VSTCBTdHlsZVNoZWV0OjpiYXNlVVJMKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fZmluYWxVUkwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX2Zp
bmFsVVJMOwotICAgIGlmIChTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hl
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudFNoZWV0LT5iYXNlVVJMKCk7Ci0gICAgaWYgKCFt
X293bmVyTm9kZSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsKLSAgICByZXR1cm4gbV9vd25lck5v
ZGUtPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKLX0KLQotdm9pZCBTdHlsZVNoZWV0OjpzZXREaXNh
YmxlZChib29sIGRpc2FibGVkKQotewotICAgICBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7Ci0gICAg
IGlmIChpc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPih0aGlzKS0+c3R5bGVTaGVldENoYW5nZWQoKTsKLX0KLQogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSAxOTk5
LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOSw0OCArMzksMjEgQEAgY2xhc3MgU3R5bGVTaGVl
dCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eQogcHVibGljOgogICAgIHZpcnR1YWwgflN0eWxlU2hl
ZXQoKTsKIAotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9
Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLQotICAgIE5vZGUqIG93bmVyTm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXJOb2RlOyB9Ci0gICAgdm9pZCBjbGVhck93bmVyTm9kZSgpIHsg
bV9vd25lck5vZGUgPSAwOyB9Ci0KLSAgICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCkgPSAwOworICAgIHZp
cnR1YWwgTm9kZSogb3duZXJOb2RlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3R5bGVTaGVl
dCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE5vdGUg
dGhhdCBocmVmIGlzIHRoZSBVUkwgdGhhdCBzdGFydGVkIHRoZSByZWRpcmVjdCBjaGFpbiB0aGF0
IGxlZCB0bwotICAgIC8vIHRoaXMgc3R5bGUgc2hlZXQuIFRoaXMgcHJvcGVydHkgcHJvYmFibHkg
aXNuJ3QgdXNlZnVsIGZvciBtdWNoIGV4Y2VwdAotICAgIC8vIHRoZSBKYXZhU2NyaXB0IGJpbmRp
bmcgKHdoaWNoIG5lZWRzIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBzZWN1cml0eSkuCi0gICAgY29u
c3QgU3RyaW5nJiBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFVSTDsgfQotCi0gICAg
dm9pZCBzZXRGaW5hbFVSTChjb25zdCBLVVJMJiBmaW5hbFVSTCkgeyBtX2ZpbmFsVVJMID0gZmlu
YWxVUkw7IH0KLSAgICBjb25zdCBLVVJMJiBmaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlu
YWxVUkw7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
clRpdGxlOyB9Ci0gICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHMpIHsgbV9zdHJUaXRs
ZSA9IHM7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgTWVkaWFMaXN0KiBtZWRp
YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpID0gMDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gQ1NTU3RyaWN0
TW9kZSkgPSAwOwogCisgICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgPSAwOwor
ICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBp
c0xvYWRpbmcoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBLVVJMIGJhc2VVUkwoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIFN0eWxlU2hlZXQoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJp
bmcmIGhyZWYsIGNvbnN0IEtVUkwmIGZpbmFsVVJMKTsKLSAgICBTdHlsZVNoZWV0KGNvbnN0IFN0
cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgZmluYWxVUkwpOwotCi1wcml2YXRlOgotICAgIGJvb2wg
bV9kaXNhYmxlZDsKLSAgICBOb2RlKiBtX293bmVyTm9kZTsKLSAgICBTdHJpbmcgbV9vcmlnaW5h
bFVSTDsKLSAgICBLVVJMIG1fZmluYWxVUkw7Ci0gICAgU3RyaW5nIG1fc3RyVGl0bGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lc1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlLmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOCArMTA5
LDkgQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKAogewogICAgIEFT
U0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1fa2V5ZnJhbWVzUnVsZS0+
a2V5ZnJhbWVzKCkuc2l6ZSgpKTsKIAotICAgIENTU1BhcnNlciBwKGNzc1BhcnNlck1vZGUoKSk7
Ci0gICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IGtleWZyYW1lID0gcC5wYXJzZUtleWZyYW1lUnVs
ZShwYXJlbnRTdHlsZVNoZWV0KCksIHJ1bGVUZXh0KTsKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOworICAgIENTU1BhcnNlciBwYXJzZXIoc3R5bGVT
aGVldCA/IHN0eWxlU2hlZXQtPmludGVybmFsKCktPmNzc1BhcnNlck1vZGUoKSA6IENTU1N0cmlj
dE1vZGUpOworICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBrZXlmcmFtZSA9IHBhcnNlci5wYXJz
ZUtleWZyYW1lUnVsZShzdHlsZVNoZWV0ID8gc3R5bGVTaGVldC0+aW50ZXJuYWwoKSA6IDAsIHJ1
bGVUZXh0KTsKICAgICBpZiAoIWtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMTEzOTAyKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA3LDkgKzMwNyw5IEBAIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gRE9NSW1wbGVt
ZW50YXQKIHsKICAgICAvLyBGSVhNRTogVGl0bGUgc2hvdWxkIGJlIHNldC4KICAgICAvLyBGSVhN
RTogTWVkaWEgY291bGQgaGF2ZSB3cm9uZyBzeW50YXgsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxk
IGdlbmVyYXRlIGFuIGV4Y2VwdGlvbi4KLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiBzaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKCk7CiAgICAgc2hlZXQtPnNldE1l
ZGlhUXVlcmllcyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4
KG1lZGlhKSk7Ci0gICAgcmV0dXJuIHNoZWV0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKHNoZWV0KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHZh
bGlkWE1MTUlNRVR5cGVDaGFycyA9ICJbMC05YS16QS1aX1xcLSt+ISRcXF57fXwuJSdgIyYqXSI7
IC8vIHBlciBSRkNzOiAzMDIzLCAyMDQ1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTI1NTcs
NyArMjU1Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogICAgICAgICBtX2Jh
c2VVUkwgPSBLVVJMKCk7CiAKICAgICBpZiAobV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxlbVNo
ZWV0LT5zZXRGaW5hbFVSTChtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1TaGVldC0+aW50ZXJu
YWwoKS0+c2V0RmluYWxVUkwobV9iYXNlVVJMKTsKICAgICAKICAgICBpZiAoIWVxdWFsSWdub3Jp
bmdGcmFnbWVudElkZW50aWZpZXIob2xkQmFzZVVSTCwgbV9iYXNlVVJMKSkgewogICAgICAgICAv
LyBCYXNlIFVSTCBjaGFuZ2UgY2hhbmdlcyBhbnkgcmVsYXRpdmUgdmlzaXRlZCBsaW5rcy4KQEAg
LTI2ODgsNyArMjY4OCw3IEBAIGJvb2wgRG9jdW1lbnQ6OmNhbkJlQWNjZXNzZWRCeUV2ZXJ5QW5j
ZXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6OnBhZ2VV
c2VyU2hlZXQoKQorU3R5bGVTaGVldEludGVybmFsKiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgp
CiB7CiAgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKICAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJT
aGVldC5nZXQoKTsKQEAgLTI3MDIsNyArMjcwMiw3IEBAIENTU1N0eWxlU2hlZXQqIERvY3VtZW50
OjpwYWdlVXNlclNoZWV0KCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgLy8gUGFyc2Ug
dGhlIHNoZWV0IGFuZCBjYWNoZSBpdC4KLSAgICBtX3BhZ2VVc2VyU2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlv
bigpKTsKKyAgICBtX3BhZ2VVc2VyU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlu
bGluZSh0aGlzLCBzZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOwogICAgIG1f
cGFnZVVzZXJTaGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKICAgICBtX3BhZ2VVc2Vy
U2hlZXQtPnBhcnNlU3RyaW5nKHVzZXJTaGVldFRleHQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSgh
aW5RdWlya3NNb2RlKCkpKTsKICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwpAQCAt
MjcyMyw3ICsyNzIzLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUGFnZVVzZXJTaGVldCgpCiAg
ICAgICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQog
Ci1jb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIERvY3VtZW50OjpwYWdlR3Jv
dXBVc2VyU2hlZXRzKCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0CiB7CiAgICAgaWYg
KG1fcGFnZUdyb3VwVXNlclNoZWV0Q2FjaGVWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fcGFnZUdy
b3VwVXNlclNoZWV0cy5nZXQoKTsKQEAgLTI3NDgsMTEgKzI3NDgsMTEgQEAgY29uc3QgVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBEbwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyh1
cmwoKSwgc2hlZXQtPndoaXRlbGlzdCgpLCBzaGVldC0+YmxhY2tsaXN0KCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhcnNl
ZFNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQq
Pih0aGlzKSwgc2hlZXQtPnVybCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+IHBhcnNlZFNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxpbmUoY29u
c3RfY2FzdDxEb2N1bWVudCo+KHRoaXMpLCBzaGVldC0+dXJsKCkpOwogICAgICAgICAgICAgcGFy
c2VkU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQoc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxl
VXNlckxldmVsKTsKICAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5wYXJzZVN0cmluZyhzaGVldC0+
c291cmNlKCksIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghaW5RdWlya3NNb2RlKCkpKTsKICAgICAg
ICAgICAgIGlmICghbV9wYWdlR3JvdXBVc2VyU2hlZXRzKQotICAgICAgICAgICAgICAgIG1fcGFn
ZUdyb3VwVXNlclNoZWV0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4pOworICAgICAgICAgICAgICAgIG1fcGFnZUdyb3VwVXNlclNoZWV0cyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPik7CiAgICAgICAgICAgICBt
X3BhZ2VHcm91cFVzZXJTaGVldHMtPmFwcGVuZChwYXJzZWRTaGVldC5yZWxlYXNlKCkpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjc3NiwxMCArMjc3NiwxMCBAQCB2b2lkIERvY3VtZW50Ojp1cGRh
dGVQYWdlR3JvdXBVc2VyU2hlZXRzCiAgICAgICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2Fs
Y1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQoUGFz
c1JlZlB0cjxDU1NTdHlsZVNoZWV0PiB1c2VyU2hlZXQpCit2b2lkIERvY3VtZW50OjphZGRVc2Vy
U2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHVzZXJTaGVldCkKIHsKICAgICBp
ZiAoIW1fdXNlclNoZWV0cykKLSAgICAgICAgbV91c2VyU2hlZXRzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPik7CisgICAgICAgIG1fdXNlclNoZWV0cyA9IGFk
b3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPik7CiAgICAgbV91
c2VyU2hlZXRzLT5hcHBlbmQodXNlclNoZWV0KTsKICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChS
ZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KQEAgLTI3ODcsNyArMjc4Nyw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmFkZFVzZXJTaGVldChQYXNzUmVmUHRyPEMKIENTU1N0eWxlU2hlZXQqIERvY3VtZW50
OjplbGVtZW50U2hlZXQoKQogewogICAgIGlmICghbV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxl
bVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRoaXMsIG1fYmFzZVVSTCk7Cisg
ICAgICAgIG1fZWxlbVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFN0eWxlU2hlZXRJbnRl
cm5hbDo6Y3JlYXRlSW5saW5lKHRoaXMsIG1fYmFzZVVSTCkpOwogICAgIHJldHVybiBtX2VsZW1T
aGVldC5nZXQoKTsKIH0KIApAQCAtMzMxNiwxMCArMzMxNiw4IEBAIHZvaWQgRG9jdW1lbnQ6OmNv
bGxlY3RBY3RpdmVTdHlsZXNoZWV0cygKICAgICB9CiB9CiAKLWJvb2wgRG9jdW1lbnQ6OnRlc3RB
ZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxlU2hlZXQqIHN0eWxlc2hl
ZXQpCitib29sIERvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2Fs
YyhTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlc2hlZXQpCiB7Ci0gICAgaWYgKHN0eWxlc2hlZXQt
PmRpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBTZWUgaWYgYWxsIHJ1
bGVzIG9uIHRoZSBzaGVldCBhcmUgc2NvcGVkIHRvIHNvbWUgc3BlY2lmaWMgaWRzIG9yIGNsYXNz
ZXMuCiAgICAgLy8gVGhlbiB0ZXN0IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW55IG9mIHRob3NlIGlu
IHRoZSB0cmVlIGF0IHRoZSBtb21lbnQuCiAgICAgLy8gRklYTUU6IEV2ZW4gd2UgaWYgd2UgZmlu
ZCBzb21lLCB3ZSBjb3VsZCBqdXN0IGludmFsaWRhdGUgdGhvc2Ugc3VidHJlZXMgaW5zdGVhZCBv
ZiBpbnZhbGlkYXRpbmcgdGhlIGVudGlyZSBzdHlsZS4KQEAgLTMzOTEsNyArMzM4OSw5IEBAIHZv
aWQgRG9jdW1lbnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKFMKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRTdHlsZXNoZWV0Q291bnQ7IGkgPCBuZXdTdHlsZXNoZWV0Q291bnQ7ICsraSkgewog
ICAgICAgICBpZiAoIW5ld1N0eWxlc2hlZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0
eWxlUmVjYWxjKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihuZXdTdHlsZXNoZWV0c1tpXS5n
ZXQoKSkpKQorICAgICAgICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmRpc2FibGVkKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJl
c1N0eWxlUmVjYWxjKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihuZXdTdHlsZXNoZWV0c1tp
XS5nZXQoKSktPmludGVybmFsKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBy
ZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xMjcsNiArMTI3LDcgQEAg
Y2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xh
c3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldEludGVybmFs
OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0OwogY2xhc3MgVGV4dFJlc291cmNl
RGVjb2RlcjsKQEAgLTYyMywxNiArNjI0LDE2IEBAIHB1YmxpYzoKICAgICBib29sIGNhbk5hdmln
YXRlKEZyYW1lKiB0YXJnZXRGcmFtZSk7CiAgICAgYm9vbCBjYW5CZUFjY2Vzc2VkQnlFdmVyeUFu
Y2VzdG9yRnJhbWUoKTsKIAotICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQoKTsKKyAg
ICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhZ2VVc2VyU2hlZXQoKTsKICAgICB2b2lkIGNsZWFyUGFn
ZVVzZXJTaGVldCgpOwogICAgIHZvaWQgdXBkYXRlUGFnZVVzZXJTaGVldCgpOwogCi0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzKCkg
Y29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHBh
Z2VHcm91cFVzZXJTaGVldHMoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyUGFnZUdyb3VwVXNlclNo
ZWV0cygpOwogICAgIHZvaWQgdXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0cygpOwogCi0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMoKSBj
b25zdCB7IHJldHVybiBtX3VzZXJTaGVldHMuZ2V0KCk7IH0KLSAgICB2b2lkIGFkZFVzZXJTaGVl
dChQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHVzZXJTaGVldCk7CisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIGRvY3VtZW50VXNlclNoZWV0cygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlclNoZWV0cy5nZXQoKTsgfQorICAgIHZvaWQgYWRkVXNlclNoZWV0KFBh
c3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiB1c2VyU2hlZXQpOwogCiAgICAgQ1NTU3R5bGVT
aGVldCogZWxlbWVudFNoZWV0KCk7CiAgICAgCkBAIC0xMTgxLDcgKzExODIsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIGJvb2wgdXBkYXRlQWN0aXZlU3R5bGVzaGVldHMoU3R5bGVTZWxlY3RvclVw
ZGF0ZUZsYWcpOwogICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlc2hlZXRzKFZlY3RvcjxSZWZQ
dHI8U3R5bGVTaGVldD4gPiYpOwotICAgIGJvb2wgdGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVz
U3R5bGVSZWNhbGMoQ1NTU3R5bGVTaGVldCopOworICAgIGJvb2wgdGVzdEFkZGVkU3R5bGVzaGVl
dFJlcXVpcmVzU3R5bGVSZWNhbGMoU3R5bGVTaGVldEludGVybmFsKik7CiAgICAgdm9pZCBhbmFs
eXplU3R5bGVzaGVldENoYW5nZShTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZywgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBuZXdTdHlsZXNoZWV0cywgYm9vbCYgcmVxdWlyZXNTdHls
ZVNlbGVjdG9yUmVzZXQsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKIAogICAgIHZv
aWQgZGVsZXRlQ3VzdG9tRm9udHMoKTsKQEAgLTEyNTcsOSArMTI1OCw5IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGU7CiAKICAgICBSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gbV9lbGVtU2hlZXQ7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFn
ZVVzZXJTaGVldDsKLSAgICBtdXRhYmxlIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4gPiBtX3BhZ2VHcm91cFVzZXJTaGVldHM7Ci0gICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiA+IG1fdXNlclNoZWV0czsKKyAgICBSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiBtX3BhZ2VVc2VyU2hlZXQ7CisgICAgbXV0YWJsZSBPd25QdHI8VmVjdG9yPFJlZlB0
cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4gPiBtX3BhZ2VHcm91cFVzZXJTaGVldHM7CisgICAgT3du
UHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+ID4gbV91c2VyU2hlZXRzOwog
ICAgIG11dGFibGUgYm9vbCBtX3BhZ2VHcm91cFVzZXJTaGVldENhY2hlVmFsaWQ7CiAKICAgICBi
b29sIG1fcHJpbnRpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmli
dXRlRGF0YS5jcHAJKHJldmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDgsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKIAorI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTgyLDcgKzgzLDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6dXBkYXRlSW5saW5l
UwogICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgp
OwogICAgICAgICBtX2lubGluZVN0eWxlRGVjbC0+c2V0Q1NTUGFyc2VyTW9kZShzdHJpY3RUb0NT
U1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSkpOwogICAgIH0KLSAgICBtX2lubGluZVN0eWxlRGVjbC0+cGFy
c2VEZWNsYXJhdGlvbih0ZXh0LCBlbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7
CisgICAgbV9pbmxpbmVTdHlsZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmludGVybmFsKCkpOwogfQogCiB2b2lkIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3Bw
CShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDE1ICsyMTEsMTYgQEAgdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxlUwogICAgIH0KIAogICAgIEFTU0VSVChtX2lz
Q1NTKTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbmV3U2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7Ci0gICAgbV9zaGVldCA9IG5l
d1NoZWV0OworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG5ld1NoZWV0ID0gU3R5bGVT
aGVldEludGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
bV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShuZXdTaGVldCk7CiAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0aGUgY3Jvc3Mtb3JpZ2luIHNlY3VyaXR5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBh
cmUKICAgICAvLyBnZXR0aW5nIHRoZSBzaGVldCB0ZXh0IGluICJzdHJpY3QiIG1vZGUuIFRoaXMg
ZW5mb3JjZXMgYSB2YWxpZCBDU1MgTUlNRQogICAgIC8vIHR5cGUuCi0gICAgcGFyc2VTdHlsZVNo
ZWV0KHNoZWV0LT5zaGVldFRleHQodHJ1ZSkpOwogICAgIG5ld1NoZWV0LT5zZXRUaXRsZShtX3Rp
dGxlKTsKICAgICBuZXdTaGVldC0+c2V0TWVkaWFRdWVyaWVzKE1lZGlhUXVlcnlTZXQ6OmNyZWF0
ZShtX21lZGlhKSk7Ci0gICAgbmV3U2hlZXQtPnNldERpc2FibGVkKG1fYWx0ZXJuYXRlKTsKKyAg
ICBtX3NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CisKKyAgICBwYXJzZVN0eWxlU2hl
ZXQoc2hlZXQtPnNoZWV0VGV4dCh0cnVlKSk7CiB9CiAKICNpZiBFTkFCTEUoWFNMVCkKQEAgLTIz
Myw3ICsyMzQsMTEgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldFhTTFN0eWxlUwog
CiB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmlu
ZyYgc2hlZXQpCiB7Ci0gICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQsIENTU1N0cmljdE1v
ZGUpOworICAgIGlmIChtX2lzQ1NTKQorICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
Kj4obV9zaGVldC5nZXQoKSktPmludGVybmFsKCktPnBhcnNlU3RyaW5nKHNoZWV0LCBDU1NTdHJp
Y3RNb2RlKTsKKyAgICBlbHNlIGlmIChtX2lzWFNMKQorICAgICAgICBzdGF0aWNfY2FzdDxYU0xT
dHlsZVNoZWV0Kj4obV9zaGVldC5nZXQoKSktPnBhcnNlU3RyaW5nKHNoZWV0KTsKKwogICAgIGlm
IChtX2NhY2hlZFNoZWV0KQogICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQodGhp
cyk7CiAgICAgbV9jYWNoZWRTaGVldCA9IDA7CkBAIC0yNDEsNyArMjQ2LDcgQEAgdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OnBhcnNlU3R5bGVTaAogICAgIG1fbG9hZGluZyA9IGZhbHNlOwog
CiAgICAgaWYgKG1faXNDU1MpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPiht
X3NoZWV0LmdldCgpKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5pbnRlcm5hbCgpLT5jaGVja0xvYWRlZCgpOwogI2lm
IEVOQUJMRShYU0xUKQogICAgIGVsc2UgaWYgKG1faXNYU0wpCiAgICAgICAgIHN0YXRpY19jYXN0
PFhTTFN0eWxlU2hlZXQqPihtX3NoZWV0LmdldCgpKS0+Y2hlY2tMb2FkZWQoKTsKQEAgLTI1Myw4
ICsyNTgsOCBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0Q1NTU3R5bGVTCiAgICAg
QVNTRVJUKCFtX2NhY2hlZFNoZWV0KTsKICAgICBBU1NFUlQoIW1fbG9hZGluZyk7CiAgICAgbV9z
aGVldCA9IHNoZWV0OwotICAgIG1fc2hlZXQtPnNldFRpdGxlKG1fdGl0bGUpOwotICAgIG1fc2hl
ZXQtPnNldERpc2FibGVkKG1fYWx0ZXJuYXRlKTsKKyAgICBzaGVldC0+aW50ZXJuYWwoKS0+c2V0
VGl0bGUobV90aXRsZSk7CisgICAgc2hlZXQtPnNldERpc2FibGVkKG1fYWx0ZXJuYXRlKTsKIH0K
IAogYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Om9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCwxNiArMTY4LDE3IEBAIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVtZW50
KiAKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpIHx8IHBy
aW50RXZhbC5ldmFsKG1lZGlhUXVlcmllcy5nZXQoKSkpIHsKICAgICAgICAgICAgIGRvY3VtZW50
LT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAg
ICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGUsIFN0cmluZygpLCBLVVJM
KCksIGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOwotICAgICAgICAgICAgbV9zaGVldC0+cGFy
c2VTdHJpbmdBdExpbmUodGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFkb2N1bWVudC0+aW5R
dWlya3NNb2RlKCkpLCBzdGFydExpbmVOdW1iZXIpOwotICAgICAgICAgICAgbV9zaGVldC0+c2V0
TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOwotICAgICAgICAgICAgbV9zaGVl
dC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiBzdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoZSwgU3RyaW5n
KCksIEtVUkwoKSwgZG9jdW1lbnQtPmlucHV0RW5jb2RpbmcoKSk7CisgICAgICAgICAgICBzdHls
ZVNoZWV0LT5wYXJzZVN0cmluZ0F0TGluZSh0ZXh0LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIWRv
Y3VtZW50LT5pblF1aXJrc01vZGUoKSksIHN0YXJ0TGluZU51bWJlcik7CisgICAgICAgICAgICBz
dHlsZVNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMobWVkaWFRdWVyaWVzLnJlbGVhc2UoKSk7CisgICAg
ICAgICAgICBzdHlsZVNoZWV0LT5zZXRUaXRsZShlLT50aXRsZSgpKTsKKyAgICAgICAgICAgIG1f
c2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CiAgICAgICAgICAgICBt
X2xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX3NoZWV0KQot
ICAgICAgICBtX3NoZWV0LT5jaGVja0xvYWRlZCgpOworICAgICAgICBtX3NoZWV0LT5pbnRlcm5h
bCgpLT5jaGVja0xvYWRlZCgpOwogfQogCiBib29sIFN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEx
MzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5
bGVQcm9wZXIKIAogYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQpCiB7Ci0gICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVN
dXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBp
bXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBib29sIGNoYW5nZXMg
PSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZG9jdW1lbnQoKS0+ZWxl
bWVudFNoZWV0KCktPmludGVybmFsKCkpOwogICAgIGlmIChjaGFuZ2VzKQogICAgICAgICBpbmxp
bmVTdHlsZUNoYW5nZWQoKTsKICAgICByZXR1cm4gY2hhbmdlczsKQEAgLTIyNiw3ICsyMjYsNyBA
QCBib29sIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZUlubGluZVN0eWxlUHJvCiB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cykgY29uc3QKIHsKICAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBhdHRy
aWJ1dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmlubGluZVN0eWxlKCkgOiAwKQotICAgICAg
ICBpbmxpbmVTdHlsZS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgZG9jdW1lbnQoKS0+
ZWxlbWVudFNoZWV0KCkpOworICAgICAgICBpbmxpbmVTdHlsZS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmludGVybmFsKCkpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgYXR0cmlidXRlTmFtZVNvcnQoY29uc3QgcGFpcjxBdG9taWNT
dHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nPiYgcDEsIGNvbnN0IHBhaXI8QXRvbWljU3RyaW5nSW1w
bCosIEF0b21pY1N0cmluZz4mIHAyKQpAQCAtMzMzLDUgKzMzMywxMCBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1CiB7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVlLCB1bml0KSk7CiB9Cisg
ICAgCit2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwg
ZmFsc2UsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKK30KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAxMTM5MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
MTEgKzExMyw2IEBAIGlubGluZSBTdHlsZVByb3BlcnR5U2V0KiBTdHlsZWRFbGVtZW50OjoKICAg
ICByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVTdHls
ZSgpIDogMDsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0
dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIHZhbHVlLCBmYWxzZSwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwotfQot
CiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
bnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTE3
Niw3ICsxNzcsNyBAQCB2b2lkIEhUTUxGb250RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sb3JBdHRyKQogICAgICAgICBhZGRIVE1M
Q29sb3JUb1N0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yLCBhdHRyLT52YWx1ZSgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZmFjZUF0dHIpIHsKLSAgICAgICAgaWYgKFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYWNlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVGb250
RmFjZVZhbHVlKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKSkKKyAg
ICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYWNlVmFsdWUgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVGb250RmFjZVZhbHVlKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCktPmVsZW1l
bnRTaGVldCgpLT5pbnRlcm5hbCgpKSkKICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnRGYWNlVmFsdWUucmVsZWFzZSgp
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRy
aWJ1dGUoYXR0ciwgc3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dAogICAgICAgICBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSB0aXRsZUF0dHIgJiYgbV9zaGVldCkKLSAgICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxl
KGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgbV9zaGVldC0+aW50ZXJuYWwoKS0+c2V0VGl0
bGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShh
dHRyKTsKICAgICB9CiB9CkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQoYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBjaGFyc2V0KTsK
KyAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBzdHlsZVNoZWV0ID0gU3R5bGVTaGVldElu
dGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CiAKICAgICBib29s
IHN0cmljdFBhcnNpbmcgPSAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7CiAgICAgYm9vbCBl
bmZvcmNlTUlNRVR5cGUgPSBzdHJpY3RQYXJzaW5nOwpAQCAtMzExLDcgKzMxMSw3IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGMKICNlbmRpZgogCiAgICAgU3RyaW5n
IHNoZWV0VGV4dCA9IHNoZWV0LT5zaGVldFRleHQoZW5mb3JjZU1JTUVUeXBlLCAmdmFsaWRNSU1F
VHlwZSk7Ci0gICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoc2hlZXRUZXh0LCBzdHJpY3RUb0NTU1Bh
cnNlck1vZGUoc3RyaWN0UGFyc2luZykpOworICAgIHN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHNo
ZWV0VGV4dCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKHN0cmljdFBhcnNpbmcpKTsKIAogICAgIC8v
IElmIHdlJ3JlIGxvYWRpbmcgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbiwgYW5kIHRoZSBNSU1F
IHR5cGUgaXMgbm90CiAgICAgLy8gc3RhbmRhcmQsIHJlcXVpcmUgdGhlIENTUyB0byBhdCBsZWFz
dCBzdGFydCB3aXRoIGEgc3ludGFjdGljYWxseQpAQCAtMzIxLDggKzMyMSw4IEBAIHZvaWQgSFRN
TExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGMKICAgICBpZiAoIWRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoYmFzZVVSTCkpCiAgICAgICAgIGNyb3NzT3JpZ2lu
Q1NTID0gdHJ1ZTsKIAotICAgIGlmIChjcm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAm
JiAhbV9zaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCi0gICAgICAgIG1f
c2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNl
dCk7CisgICAgaWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFzdHlsZVNo
ZWV0LT5oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoKSkKKyAgICAgICAgc3R5bGVTaGVl
dCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNoYXJz
ZXQpOwogCiAgICAgaWYgKHN0cmljdFBhcnNpbmcgJiYgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mp
IHsKICAgICAgICAgLy8gV29yayBhcm91bmQgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODM1MD4uCkBAIC0zMzIsMjAgKzMzMiwyMCBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgICAgIC8vIHdoaWxlIHRoZSBvdGhlciBsYWNr
cyB0aGUgc2Vjb25kIHRyYWlsaW5nIG5ld2xpbmUuCiAgICAgICAgIGlmIChiYXNlVVJMLnN0cmlu
ZygpLmVuZHNXaXRoKHNsYXNoS0hUTUxGaXhlc0RvdENzcykgJiYgIXNoZWV0VGV4dC5pc051bGwo
KSAmJiBtZWRpYVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5zdGFydHNXaXRoKHNoZWV0VGV4dCkK
ICAgICAgICAgICAgICAgICAmJiBzaGVldFRleHQubGVuZ3RoKCkgPj0gbWVkaWFXaWtpS0hUTUxG
aXhlc1N0eWxlU2hlZXQubGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zaGVl
dC0+bGVuZ3RoKCkgPT0gMSk7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAg
ICAgICAgbV9zaGVldC0+ZGVsZXRlUnVsZSgwLCBlYyk7CisgICAgICAgICAgICBBU1NFUlQoc3R5
bGVTaGVldC0+cnVsZUNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICBzdHlsZVNoZWV0LT5jbGVh
clJ1bGVzKCk7CiAgICAgICAgIH0KICAgICB9CisgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZShzdHlsZVNoZWV0KTsKIAotICAgIG1fc2hlZXQtPnNldFRpdGxlKHRpdGxlKCkpOwor
ICAgIHN0eWxlU2hlZXQtPnNldFRpdGxlKHRpdGxlKCkpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVl
cnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5
bnRheChtX21lZGlhKTsKLSAgICBtX3NoZWV0LT5zZXRNZWRpYVF1ZXJpZXMobWVkaWEucmVsZWFz
ZSgpKTsKKyAgICBzdHlsZVNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMobWVkaWEucmVsZWFzZSgpKTsK
IAogICAgIG1fbG9hZGluZyA9IGZhbHNlOwotICAgIG1fc2hlZXQtPm5vdGlmeUxvYWRlZFNoZWV0
KHNoZWV0KTsKLSAgICBtX3NoZWV0LT5jaGVja0xvYWRlZCgpOworICAgIHN0eWxlU2hlZXQtPm5v
dGlmeUxvYWRlZFNoZWV0KHNoZWV0KTsKKyAgICBzdHlsZVNoZWV0LT5jaGVja0xvYWRlZCgpOwog
fQogCiBib29sIEhUTUxMaW5rRWxlbWVudDo6c3R5bGVTaGVldElzTG9hZGluZygpIGNvbnN0CkBA
IC0zNTQsNyArMzU0LDcgQEAgYm9vbCBIVE1MTGlua0VsZW1lbnQ6OnN0eWxlU2hlZXRJc0xvYWRp
bgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIW1fc2hlZXQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gbV9zaGVldC0+aXNMb2FkaW5nKCk7CisgICAgcmV0dXJuIG1f
c2hlZXQtPmludGVybmFsKCktPmlzTG9hZGluZygpOwogfQogCiB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6bGlua0xvYWRlZCgpCkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cgogICAgIAogICAgIC8vIFdhbGsgdGhlIFVSTHMgbGlua2VkIGJ5
IHRoZSBsaW5rZWQtdG8gc3R5bGVzaGVldC4KICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IGNvbnN0X2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4odGhpcyktPnNoZWV0KCkpCi0gICAg
ICAgIHN0eWxlU2hlZXQtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOworICAgICAgICBz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKIH0K
IAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OmFkZFBlbmRpbmdTaGVldChQZW5kaW5nU2hlZXRUeXBl
IHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDExMzkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgUGFzc1JlZlB0cjxIVE1MU3R5bGVF
bGVtZW50PiBIVE1MU3R5bGVFbAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIg
JiYgbV9zaGVldCkKLSAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7Cisg
ICAgICAgIG1fc2hlZXQtPmludGVybmFsKCktPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwogICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQogICAgICAgICBzZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bmVycm9yQXR0cikKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0CiAgICAgSFRNTEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyh1cmxzKTsKIAogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29uc3Rf
Y2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4odGhpcyktPnNoZWV0KCkpCi0gICAgICAgIHN0eWxlU2hl
ZXQtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMpOworICAgICAgICBzdHlsZVNoZWV0LT5p
bnRlcm5hbCgpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKIH0KIAogYm9vbCBIVE1M
U3R5bGVFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTM5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hh
aW4oQ1NTUnVsZSogCiAgICAgICAgICAgICBtZWRpYUxpc3QgPSAwOwogCiAgICAgICAgIGlmIChw
YXJlbnRTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICBzb3VyY2VVUkwgPSBwYXJlbnRTdHlsZVNo
ZWV0LT5maW5hbFVSTCgpOworICAgICAgICAgICAgc291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKTsKICAgICAgICAgICAgIGlmIChzb3VyY2VVUkwuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IEluc3BlY3RvckRPTUFnZW50Ojpk
b2N1bWVudFVSTFN0cmluZyhwYXJlbnRTdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSk7CiAgICAg
ICAgIH0gZWxzZQpAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RD
aGFpbihDU1NSdWxlKiAKICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0eWxl
U2hlZXQtPmZpbmREb2N1bWVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZG9jKQogICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gZG9jLT51cmwoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIXN0eWxlU2hlZXQtPmZpbmFsVVJMKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gc3R5bGVTaGVldC0+ZmluYWxVUkwoKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0eWxlU2hlZXQtPmludGVybmFsKCktPmZp
bmFsVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0g
c3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKTsKICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gIiI7CiAgICAgICAgICAg
ICAgICAgICAgIG1lZGlhQXJyYXktPmFkZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3Qs
IHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpID8gTWVkaWFMaXN0U291cmNlTGlua2VkU2hlZXQgOiBN
ZWRpYUxpc3RTb3VyY2VJbmxpbmVTaGVldCwgc291cmNlVVJMKSk7CkBAIC0zMTQsNyArMzE0LDcg
QEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVucwogICAgICAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcE11dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRh
ID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKICAgICAgICAgQ1NTUGFyc2VyIHA7Ci0g
ICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0
eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwg
bV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpKTsKKyAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9u
KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVy
dHlOYW1lICsgIjogbm9uZSIsICZzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0
KCktPmludGVybmFsKCkpOwogICAgICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYg
cHJvcGVydHlEYXRhID0gc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwogICAgICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlEYXRhLnNpemUoKTsKIApAQCAtNjg5LDggKzY4OSw4
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG8KIC8vIHN0YXRpYwog
U3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQpCiB7Ci0gICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVT
aGVldC0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYWdlU3R5bGVTaGVl
dC0+ZmluYWxVUkwoKS5zdHJpbmcoKTsKKyAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VT
dHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHBhZ2VTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVSTCgpLnN0cmluZygpOwogICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCkBAIC03MTgsOCArNzE4LDkgQEAgU3RyaW5nIElu
c3BlY3RvclN0eWxlU2hlZXQ6OmZpbmFsVVJMKCkgYwogCiB2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJlcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBtX3BhZ2VT
dHlsZVNoZWV0LT5jbGVhclJ1bGVzKCk7Ci0gICAgbV9wYWdlU3R5bGVTaGVldC0+cGFyc2VTdHJp
bmcodGV4dCwgbV9wYWdlU3R5bGVTaGVldC0+Y3NzUGFyc2VyTW9kZSgpKTsKKyAgICBtX3BhZ2VT
dHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jbGVhclJ1bGVzKCk7CisgICAgbV9wYWdlU3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+cGFyc2VTdHJpbmcodGV4dCwgbV9wYWdlU3R5bGVTaGVldC0+aW50ZXJu
YWwoKS0+Y3NzUGFyc2VyTW9kZSgpKTsKKyAgICBtX3BhZ2VTdHlsZVNoZWV0LT5jbGVhckNoaWxk
UnVsZUNTU09NV3JhcHBlcnMoKTsKICAgICBtX3BhZ2VTdHlsZVNoZWV0LT5zdHlsZVNoZWV0Q2hh
bmdlZCgpOwogICAgIG1faW5zcGVjdG9yU3R5bGVzLmNsZWFyKCk7CiAgICAgZmlyZVN0eWxlU2hl
ZXRDaGFuZ2VkKCk7CkBAIC0xMDg3LDE0ICsxMDg4LDE0IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldDo6ZW5zdXJlU291cmNlRGEKICAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldC0+aGFzVGV4
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bmV3U3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHls
ZVNoZWV0SW50ZXJuYWw+IG5ld1N0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0
ZSgpOwogICAgIENTU1BhcnNlciBwOwogICAgIFN0eWxlUnVsZVJhbmdlTWFwIHJ1bGVSYW5nZU1h
cDsKICAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNo
ZWV0LT50ZXh0KCksIDAsICZydWxlUmFuZ2VNYXApOwogICAgIE93blB0cjxQYXJzZWRTdHlsZVNo
ZWV0OjpTb3VyY2VEYXRhPiByYW5nZXNWZWN0b3IoYWRvcHRQdHIobmV3IFBhcnNlZFN0eWxlU2hl
ZXQ6OlNvdXJjZURhdGEpKTsKIAogICAgIFZlY3RvcjxDU1NTdHlsZVJ1bGUqPiBydWxlczsKLSAg
ICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChuZXdTdHlsZVNo
ZWV0LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0ID0gYXNDU1NSdWxl
TGlzdChDU1NTdHlsZVNoZWV0OjpjcmVhdGUobmV3U3R5bGVTaGVldCkuZ2V0KCkpOwogICAgIGNv
bGxlY3RGbGF0UnVsZXMocnVsZUxpc3QsICZydWxlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IHJ1bGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBTdHlsZVJ1
bGVSYW5nZU1hcDo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VNYXAuZmluZChydWxlcy5hdChpKS0+
c3R5bGVSdWxlKCkpOwpAQCAtMTQxNCw3ICsxNDE1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU6OgogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBE
ZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBw
OwotICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVU
ZXh0LCByZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAg
IHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0LCBy
ZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmludGVybmFsKCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIFBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoCiAKICAgICBpZiAodXJsLmlzVmFsaWQo
KSAmJiAhbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgewogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVuIHNwZWNpZmllZCBhbmQg
aWYgbm9uZSB3YXMgZm91bmQgYWRkIG9uZS4KLSAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNv
ZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOworICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVu
Y29kaW5nKHN0eWxlU2hlZXQtPmludGVybmFsKCktPmNoYXJzZXQoKSk7CiAgICAgICAgIEFTU0VS
VCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKICAgICAgICAgU3RyaW5nIHRleHRTdHJpbmcgPSBj
c3NUZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcgdGV4dCA9IHRleHRFbmNvZGluZy5l
bmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcubGVuZ3RoKCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxMTM5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgU1ZHU3R5
bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHQKIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnRpdGxlQXR0cikgewogICAgICAgICBpZiAobV9zaGVldCkKLSAgICAgICAgICAg
IG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgbV9zaGVldC0+
aW50ZXJuYWwoKS0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTEzOTAy
KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxl
bWVudGF0aW9uLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC02NCwxNSArNjQsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgflhT
TFN0eWxlU2hlZXQoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuICJ0ZXh0L3htbCI7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlTW9kZSA9IENTU1N0cmljdE1vZGUp
OworICAgIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgCi0gICAgdmlydHVh
bCBib29sIGlzTG9hZGluZygpOwogICAgIHZvaWQgY2hlY2tMb2FkZWQoKTsKKyAgICAKKyAgICBj
b25zdCBLVVJMJiBmaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KIAogICAg
IHZvaWQgbG9hZENoaWxkU2hlZXRzKCk7CiAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldChjb25zdCBT
dHJpbmcmIGhyZWYpOwpAQCAtODAsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBEb2N1bWVudCogb3duZXJE
b2N1bWVudCgpOwotICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudFN0eWxlU2hlZXQ7IH0KKyAgICB2aXJ0dWFsIFhTTFN0eWxlU2hlZXQq
IHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BhcmVudFN0eWxl
U2hlZXQ7IH0KICAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFy
ZW50KTsKIAogI2lmIFVTRShRWE1MUVVFUlkpCkBAIC05NSwxMiArOTIsMzAgQEAgcHVibGljOgog
CiAgICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKTsKICAgICBib29sIHByb2Nlc3NlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2Vzc2VkOyB9CisgICAgCisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJ0ZXh0L3htbCI7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
ZGlzYWJsZWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRGlzYWJsZWQ7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCBiKSBPVkVSUklERSB7IG1faXNEaXNhYmxlZCA9
IGI7IH0KKyAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fb3duZXJOb2RlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBjbGVhck93bmVyTm9kZSgpIE9WRVJSSURFIHsgbV9vd25lck5vZGUgPSAwOyB9CisgICAg
dmlydHVhbCBLVVJMIGJhc2VVUkwoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ZpbmFsVVJM
OyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KIAogcHJpdmF0ZToKICAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBib29sIGVtYmVk
ZGVkKTsKICNpZiAhVVNFKFFYTUxRVUVSWSkKICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1
bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYg
ZmluYWxVUkwpOwogI2VuZGlmCisgICAgCisgICAgTm9kZSogbV9vd25lck5vZGU7CisgICAgU3Ry
aW5nIG1fb3JpZ2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFsVVJMOworICAgIGJvb2wgbV9pc0Rp
c2FibGVkOwogCiAgICAgVmVjdG9yPE93blB0cjxYU0xJbXBvcnRSdWxlPiA+IG1fY2hpbGRyZW47
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAko
cmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4
c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgogICoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw3ICs1NSwxMCBA
QCBTT0ZUX0xJTksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0UEksCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFy
ZW50UnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwp
Ci0gICAgOiBTdHlsZVNoZWV0KHN0YXRpY19jYXN0PE5vZGUqPigwKSwgb3JpZ2luYWxVUkwsIGZp
bmFsVVJMKQorICAgIDogbV9vd25lck5vZGUoMCkKKyAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCisgICAgLCBtX2ZpbmFsVVJMKGZpbmFsVVJMKQorICAgICwgbV9pc0Rpc2FibGVkKGZh
bHNlKQogICAgICwgbV9lbWJlZGRlZChmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2VkKGZhbHNlKSAv
LyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hlbiB0aGUgbGlieHNsdCBl
bmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgogICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCkBA
IC02NSw3ICs2OCwxMCBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1
CiB9CiAKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsICBib29sIGVtYmVk
ZGVkKQotICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwp
CisgICAgOiBtX293bmVyTm9kZShwYXJlbnROb2RlKQorICAgICwgbV9vcmlnaW5hbFVSTChvcmln
aW5hbFVSTCkKKyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisgICAgLCBtX2lzRGlzYWJsZWQo
ZmFsc2UpCiAgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQogICAgICwgbV9wcm9jZXNzZWQodHJ1
ZSkgLy8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCiAgICAgLCBtX3N0eWxl
c2hlZXREb2MoMCkKQEAgLTg1LDcgKzkxLDcgQEAgWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hl
ZXQoKQogICAgIH0KIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQorYm9vbCBY
U0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2NoaWxkcmVu
LmF0KGkpLT5pc0xvYWRpbmcoKSkKQEAgLTEyOSw3ICsxMzUsNyBAQCBDYWNoZWRSZXNvdXJjZUxv
YWRlciogWFNMU3R5bGVTaGVldDo6Y2FjCiAgICAgcmV0dXJuIGRvY3VtZW50LT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpOwogfQogCi1ib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2RlKQorYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJz
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBQYXJzZSBpbiBhIHNpbmds
ZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0cgogICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCShyZXZpc2lvbiAxMTM5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogWFNMU3R5bGVT
aGVldDo6WFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHls
ZVNoZWV0KHBhcmVudE5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCkKKyAgICA6IG1fb3duZXJO
b2RlKHBhcmVudE5vZGUpCisgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICwg
bV9maW5hbFVSTChmaW5hbFVSTCkKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKICAgICAsIG1f
ZW1iZWRkZWQoZW1iZWRkZWQpCiB7CiB9CkBAIC00Nyw3ICs1MCw3IEBAIFhTTFN0eWxlU2hlZXQ6
On5YU0xTdHlsZVNoZWV0KCkKICAgICB9CiB9CiAKLWJvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2Fk
aW5nKCkKK2Jvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTcyLDcgKzc1LDcgQEAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIFhTTFN0eWxlU2hlZXQ6OmNhYwogICAgIHJldHVybiBkb2N1bWVudC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSkKK2Jvb2wgWFNMU3R5bGVT
aGVldDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6
IEZpeCBRWG1sUXVlcnkgc28gdGhhdCBpdCBhbGxvd3MgY29tcGlsaW5nIHRoZSBzdHlsZXNoZWV0
IGJlZm9yZSBzZXR0aW5nIHRoZSBkb2N1bWVudAogICAgIC8vIHRvIGJlIHRyYW5zZm9ybWVkLiBU
aGlzIHdheSB3ZSBjb3VsZCBub3Qgb25seSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBpcyBjb3Jy
ZWN0IGJlZm9yZSB1c2luZyBpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRvY3VtZW50LmNwcAkocmV2aXNpb24gMTEzOTAyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAg
dm9pZCBXZWJEb2N1bWVudDo6aW5zZXJ0VXNlclN0eWxlU2hlZXQoYwogewogICAgIFJlZlB0cjxE
b2N1bWVudD4gZG9jdW1lbnQgPSB1bndyYXA8RG9jdW1lbnQ+KCk7CiAKLSAgICBSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gcGFyc2VkU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jdW1lbnQu
Z2V0KCkpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHBhcnNlZFNoZWV0ID0gU3R5
bGVTaGVldEludGVybmFsOjpjcmVhdGUoZG9jdW1lbnQuZ2V0KCkpOwogICAgIHBhcnNlZFNoZWV0
LT5zZXRJc1VzZXJTdHlsZVNoZWV0KGxldmVsID09IFVzZXJTdHlsZVVzZXJMZXZlbCk7CiAgICAg
cGFyc2VkU2hlZXQtPnBhcnNlU3RyaW5nKHNvdXJjZUNvZGUsIHN0cmljdFRvQ1NTUGFyc2VyTW9k
ZSghZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKSk7CiAgICAgZG9jdW1lbnQtPmFkZFVzZXJTaGVl
dChwYXJzZWRTaGVldC5yZWxlYXNlKCkpOwo=
</data>
<flag name="review"
          id="141673"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>