<?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>121161</bug_id>
          
          <creation_ts>2013-09-11 07:17:09 -0700</creation_ts>
          <short_desc>Rework CSS parser, eliminating &quot;floating&quot; concept and using %destructor</short_desc>
          <delta_ts>2013-10-15 18:26:42 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>927765</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-11 07:17:09 -0700</bug_when>
    <thetext>Rework CSS parser, eliminating &quot;floating&quot; concept and using %destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927779</commentid>
    <comment_count>1</comment_count>
      <attachid>211314</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-11 08:01:03 -0700</bug_when>
    <thetext>Created attachment 211314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927781</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 08:04:03 -0700</bug_when>
    <thetext>Attachment 211314 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/WebCore/css/CSSGrammar.y.in&apos;, u&apos;Source/WebCore/css/CSSParser.cpp&apos;, u&apos;Source/WebCore/css/CSSParser.h&apos;, u&apos;Source/WebCore/css/CSSParserValues.cpp&apos;, u&apos;Source/WebCore/css/CSSParserValues.h&apos;]&quot; exit_code: 1
Source/WebCore/css/CSSParser.cpp:11630:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/css/CSSParser.cpp:11744:  The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:11744:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:11744:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:11764:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:11787:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/css/CSSParser.cpp:11796:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:11796:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/css/CSSParser.cpp:11847:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:12088:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.h:304:  The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.h:305:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.h:314:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/css/CSSParser.h:317:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/css/CSSParser.h:340:  The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.h:340:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.h:340:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 17 in 6 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>927810</commentid>
    <comment_count>3</comment_count>
      <attachid>211314</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-11 09:15:00 -0700</bug_when>
    <thetext>Comment on attachment 211314
Patch

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

&gt;&gt; Source/WebCore/css/CSSParser.h:304
&gt;&gt; +    OwnPtr&lt;Vector&lt;OwnPtr&lt;CSSParserSelector&gt;&gt;&gt; createSelectorVector();
&gt; 
&gt; The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]

Should this return a PassOwnPtr?

&gt;&gt; Source/WebCore/css/CSSParser.h:305
&gt;&gt; +    void recycleSelectorVector(OwnPtr&lt;Vector&lt;OwnPtr&lt;CSSParserSelector&gt;&gt;&gt;);
&gt; 
&gt; The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]

Should this take a PassOwnPtr?

&gt;&gt;&gt;&gt; Source/WebCore/css/CSSParser.h:340
&gt;&gt;&gt;&gt; +    OwnPtr&lt;CSSParserSelector&gt; rewriteSpecifiers(OwnPtr&lt;CSSParserSelector&gt;, OwnPtr&lt;CSSParserSelector&gt;);
&gt;&gt;&gt; 
&gt;&gt;&gt; The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
&gt;&gt; 
&gt;&gt; The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
&gt; 
&gt; The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]

PassOwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927814</commentid>
    <comment_count>4</comment_count>
      <attachid>211314</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-11 09:23:10 -0700</bug_when>
    <thetext>Comment on attachment 211314
Patch

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

r=me

&gt; Source/WebCore/css/CSSGrammar.y.in:188
&gt; +%union { StyleRuleBase* rule; }

Is there still no way to use safe types in grammar? All these leakRefs and leakPtrs are bit scary.

&gt;&gt;&gt;&gt; Source/WebCore/css/CSSParser.cpp:11744
&gt;&gt;&gt;&gt; +    specifiers-&gt;appendTagHistory(CSSSelector::SubSelector, newSpecifier.release());
&gt;&gt;&gt; 
&gt;&gt;&gt; The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
&gt;&gt; 
&gt;&gt; The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
&gt; 
&gt; The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]

style bot needs to learn that PassOwnPtr is obsolete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927815</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-11 09:24:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; style bot needs to learn that PassOwnPtr is obsolete

Sam needs to learn that PassOwnPtr is obsolete :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927824</commentid>
    <comment_count>6</comment_count>
      <attachid>211314</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-11 09:45:58 -0700</bug_when>
    <thetext>Comment on attachment 211314
Patch

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

&gt;&gt; Source/WebCore/css/CSSGrammar.y.in:188
&gt;&gt; +%union { StyleRuleBase* rule; }
&gt; 
&gt; Is there still no way to use safe types in grammar? All these leakRefs and leakPtrs are bit scary.

I’ll keep looking for a way to do it without having to write leakRef/leakPtr/adoptRef/adoptPtr/new/delete directly and if I find one I will switch to it.

The fact that so much CSS parsing doesn’t use the union at all and instead using state inside CSSParser seems to point to a possible direction, but I am unclear how that works during the parsing process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927826</commentid>
    <comment_count>7</comment_count>
      <attachid>211314</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 09:47:23 -0700</bug_when>
    <thetext>Comment on attachment 211314
Patch

Clearing flags on attachment: 211314

Committed r155536: &lt;http://trac.webkit.org/changeset/155536&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927827</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 09:47:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939899</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-15 02:10:11 -0700</bug_when>
    <thetext>Looks like this may have caused 3-4% performance regression on SVG/Bamboo:Time?
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mountainlion%22%2C%22SVG%2FBamboo%3ATime%22%5D%2C%5B%22mac-lion%22%2C%22SVG%2FBamboo%3ATime%22%5D%5D&amp;days=56</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940216</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-15 18:26:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Looks like this may have caused 3-4% performance regression on SVG/Bamboo:Time?
&gt; https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mountainlion%22%2C%22SVG%2FBamboo%3ATime%22%5D%2C%5B%22mac-lion%22%2C%22SVG%2FBamboo%3ATime%22%5D%5D&amp;days=56

Oops, this was a 3% perf. improvement!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211314</attachid>
            <date>2013-09-11 08:01:03 -0700</date>
            <delta_ts>2013-09-11 09:47:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121161-20130911080102.patch</filename>
            <type>text/plain</type>
            <size>98727</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY3YTEwODg4NDRlMDA3
YzVhYjQwMjNlYjlmZWE0NWRiNTM0MzdiOS4uMjkyNjY1NDEyZDc3NjJkNjc0NDAwYjY3NDI3NjZj
ZWQ4ZWYxOGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEzLTA5LTExICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgQ1NTIHBhcnNlciwg
ZWxpbWluYXRpbmcgImZsb2F0aW5nIiBjb25jZXB0IGFuZCB1c2luZyAlZGVzdHJ1Y3RvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMTYxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBzb21l
IGJhc2ljIGltcHJvdmVtZW50LCBidXQgdGhlcmUgaXMgc3RpbGwgcm9vbSBmb3IgYSBsb3QgbW9y
ZQorICAgICAgICBjb25zaXN0ZW50IGFwcHJvYWNoIGFuZCBmb3JtYXR0aW5nIGluIHRoaXMgZmls
ZS4gVGhlcmUgaXMgYSBtaXggb2YgY29kZSB0aGF0CisgICAgICAgIHdvcmtzIGJ5IHNpZGUgZWZm
ZWN0cyBpbiB0aGUgQ1NTUGFyc2VyIGNsYXNzIGFuZCBjb2RlIHRoYXQgd29ya3Mgd2l0aCB0aGUK
KyAgICAgICAgdmFsdWVzIHRoYXQgYmlzb24gZ2VuZXJhdGVzIGluIHRoZSB1bmlvbiB0aGF0IGlz
IG1vcmUgb3IgbGVzcyByYW5kb20uIEFuZAorICAgICAgICB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHNl
ZW0gdG9vIGNvc3RseSwgd2l0aCB0b28gbXVjaCBoZWFwIGFsbG9jYXRpb24uIEFuZCB0aGUKKyAg
ICAgICAgQ1NTUGFyc2VyIGNsYXNzIGhhcyBncm93biBtYXNzaXZlLCB3aXRoIGEgbWl4IG9mIGJv
dGggZnVuY3Rpb24gZm9yIHVzZSBieQorICAgICAgICBjb2RlIHRoYXQgd2FudHMgdG8gdHJpZ2dl
ciBwYXJzaW5nLCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgY29kZSBpbgorICAgICAg
ICB0aGUgZ3JhbW1hciBmaWxlLiBBbGwgb2YgdGhhdCBjYW4gYmVuZWZpdCBmcm9tIG1vcmUgcmVm
aW5lbWVudCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5pbjog
TWFkZSBzb21lIGluY3JlbWVudGFsIGltcHJvdmVtZW50cyB0byB0aGUgc3RydWN0dXJlCisgICAg
ICAgIG9mIHRoZSBncmFtbWFyIGZpbGUsIGluY2x1ZGluZzoKKyAgICAgICAgLSBCcmVha2luZyB1
cCB0aGUgJXVuaW9uIHNvIHR5cGVzIGFyZSBkZWNsYXJlZCBuZXh0IHRvIHRoZWlyIHVzZQorICAg
ICAgICAtIEVsaW1pbmF0aW5nIG9uZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgY2F1c2VkIGJ5IHR3
byAibWF5YmVfc3BhY2UiIGluIGEgcm93CisgICAgICAgIC0gQnJlYWtpbmcgdGhlIGNvbmRpdGlv
bmFsIHNlY3Rpb25zIG91dCBpbnRvIHRoZWlyIG93biBzZWN0aW9ucyBpbnN0ZWFkIG9mCisgICAg
ICAgICAgc2NhdHRlcmluZyB0aGVtIGluIHdpdGggdGhlIG90aGVyIGNvZGUuCisgICAgICAgIC0g
RWxpbWluYXRpbmcgdW51c2VkIHJldHVybiB2YWx1ZXMgaW4gcHJvZHVjdGlvbnMgc3VjaCBhcyBj
aGFyc2V0LAorICAgICAgICAgIGlnbm9yZWRfY2hhcnNldCwgbmFtZXNwYWNlLCBtYXJnaW5fYm94
LCBpbnZhbGlkX3J1bGUsIHNhdmVfYmxvY2ssCisgICAgICAgICAgaW52YWxpZF9hdCwgYW5kIGRl
Y2xhcmF0aW9uc19hbmRfbWFyZ2lucy4KKyAgICAgICAgLSBBZGRpbmcgJWRlc3RydWN0b3IgdG8g
cHJvZHVjdGlvbnMgdGhhdCByZXR1cm4gdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkCisg
ICAgICAgICAgb3IgZGVyZWYnZC4gVGhpcyByZW1vdmVzIHRoZSBuZWVkIGZvciBDU1NQYXJzZXIg
dG8gc2VwYXJhdGVseSB0cmFjayB0aGVzZQorICAgICAgICAgIGFzICJmbG9hdGluZyIgdG8gY2xl
YW4gdXAgaW4gY2FzZSBvZiBlcnJvcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgdW5uZWVkZWQgcHJv
ZHVjdGlvbnMgc3VjaCBhcyBtZWRpYV9mZWF0dXJlLCByZWdpb25fc2VsZWN0b3IsCisgICAgICAg
ICAgYXR0cl9uYW1lLCBhbmQgbWVkaXVtLgorICAgICAgICAtIFJlbW92aW5nIGV4cGxpY2l0IGNv
ZGUgYmxvY2tzIHRoYXQganVzdCBzYXkgIiQkID0gJDEiIG9yIGVtcHR5IGJsb2NrcyB3aGVuCisg
ICAgICAgICAgdGhlcmUgaXMgbm8gcmV0dXJuIHR5cGUsIHNpbmNlIHRob3NlIGFyZSBkZWZhdWx0
LgorICAgICAgICAtIEZvcm1hdHRpbmcgbWFueSBwcm9kdWN0aW9ucyBvbiBzaW5nbGUgbGluZXMg
c2luY2UgSSBmaW5kIHRoZW0gZWFzaWVyIHRvIHJlYWQuCisgICAgICAgICAgTGF0ZXIgSSB0aGlu
ayB3ZSBjb3VsZCBtYWtlIG1hbnkgbW9yZSBDU1NQYXJzZXIgZnVuY3Rpb25zIGFuZCBtYWtlIGV2
ZW4KKyAgICAgICAgICBtb3JlIG9mIHRoZSBwcm9kdWN0aW9uIHNpbmdsZSBsaW5lcyBpbiB0aGUg
Z3JhbW1hciBmaWxlLgorICAgICAgICAtIFVzaW5nIGFkb3B0UHRyLCBhZG9wdFJlZiwgZGVsZXRl
LCBkZXJlZiwgbGVha1B0ciwgYW5kIGxlYWtSZWYgdG8gcHV0CisgICAgICAgICAgaGVhcCBhbGxv
Y2F0ZWQgdmFsdWVzIGludG8gYW5kIG91dCBvZiB0aGUgdW5pb24gd2l0aG91dCBzdG9yYWdlIGxl
YWtzLgorICAgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjp+Q1NTUGFyc2VyKTogUmVtb3ZlIHRoZSBub3ctdW5uZWVkZWQg
ZGVsZXRlQWxsVmFsdWVzIGZvcgorICAgICAgICB0aGUgdmFyaW91cyBjb2xlY3Rpb25zIG9mIGZs
b2F0aW5nIHRoaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRmlsdGVy
UnVsZSk6IERvbid0IHB1dCB0aGUgcnVsZSBpbnRvIG1fcGFyc2VkUnVsZXMsCisgICAgICAgIGp1
c3QgcmV0dXJuIGEgUGFzc1JlZlB0ciBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpjcmVhdGVJbXBvcnRSdWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZU1lZGlhUnVsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpjcmVhdGVFbXB0eU1lZGlhUnVsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpjcmVhdGVTdXBwb3J0c1J1bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OmNyZWF0ZUhvc3RSdWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKTogR290IHJpZCBvZiB0
aGUKKyAgICAgICAgdW51c2VkIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24gYW5kIGNo
YW5nZWQgaXQgdG8gdG8gdGFrZSBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmllcnNXaXRo
RWxlbWVudE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmV3cml0
ZVNwZWNpZmllcnMpOiBDaGFuZ2VkIHRoaXMgdG8gdGFrZSBhbmQgcmV0dXJuIE93blB0ci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUpOiBEb24ndCBwdXQgcnVs
ZSBpbnRvIG1fcGFyc2VkUnVsZXMsIHJldHVybgorICAgICAgICBQYXNzUmVmUHRyIGluc3RlYWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVNlbGVjdG9yVmVjdG9yKTogQWRk
ZWQuIFVzZWQgdG8gaW1wbGVtZW50IHRoZQorICAgICAgICBvcHRpbWl6YXRpb24gd2hlcmUgd2Ug
cmVjeWNsZSBhIHNpbmdsZSBzZWxlY3RvciB2ZWN0b3IuIE5vdCBzdXJlIHdlIHN0aWxsIG5lZWQK
KyAgICAgICAgdGhpcywgb3IgbWF5YmUgd2UgbmVlZCBtb3JlIG9wdGltaXphdGlvbnMgbGlrZSBp
dCwgYnV0IGZvciBub3cga2VlcCBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmVj
eWNsZVNlbGVjdG9yVmVjdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OmNyZWF0ZVJlZ2lvblJ1bGUpOiBEb24ndCBwdXQgcnVsZSBpbnRvIG1fcGFyc2VkUnVsZXMsIHJl
dHVybgorICAgICAgICBQYXNzUmVmUHRyIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OmNyZWF0ZU1hcmdpbkF0UnVsZSk6IEdvdCByaWQgb2YgdW51c2VkIHJldHVybiB2YWx1
ZS4KKyAgICAgICAgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciByZWFsLCB3
ZSBtaWdodCBhZGQgYSByZXR1cm4gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OmNyZWF0ZUtleWZyYW1lKTogRG9uJ3QgcHV0IGtleWZyYW1lIGludG8gbV9wYXJzZWRLZXlmcmFt
ZXMsCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyIGluc3RlYWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZVZpZXdwb3J0UnVsZSk6IERvbid0IHB1dCBydWxlIGludG8gbV9w
YXJzZWRSdWxlcywgcmV0dXJuCisgICAgICAgIFBhc3NSZWZQdHIgaW5zdGVhZC4KKworICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDogUmVtb3ZlZCBtYW55IG5vdy1uZWVkZWQgZnVuY3Rpb25zIHRv
IG1hbmFnZSBmbG9hdGluZyBpdGVtcy4KKyAgICAgICAgQ2hhbmdlZCBydWxlIGNyZWF0aW9uIGZ1
bmN0aW9ucyB0byByZXR1cm4gUGFzc1JlZlB0ci4gT3RoZXIgY2hhbmdlcyBhcyBtZW50aW9uZWQg
YWJvdmUuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlc3Ryb3kpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclZhbHVl
TGlzdDo6fkNTU1BhcnNlclZhbHVlTGlzdCk6IFVwZGF0ZWQgdG8gY2FsbCBkZXN0cm95LgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDogRGl0dG8uCisKIDIwMTMtMDktMDkgIFNhbnRv
c2ggTWFodG8gIDxzYW50b3NoLm1hQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEFkZGluZyAiZXhw
bGljaXQiIGtleXdvcmQgaW4gRE9NIHJlbGF0ZWQgY2xhc3NlcyBjb25zdHJ1Y3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkuaW4KaW5kZXggZDQzZDNjOWJkMzNlNWU1NzJlNGU3OTg1NTU4NDU0
YzYzOGFiNDQ5NC4uZjc0ODU0ZDA2ZmUyNzI3ZmQ5NTc1ZDUxNmUzMzgwYjMyZjZlNWVjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCkBAIC0yNywzMCArMjcsMTAgQEAKICVsZXgtcGFy
YW0geyBDU1NQYXJzZXIqIHBhcnNlciB9CiAKICV1bmlvbiB7Ci0gICAgYm9vbCBib29sZWFuOwot
ICAgIGNoYXIgY2hhcmFjdGVyOwotICAgIGludCBpbnRlZ2VyOwogICAgIGRvdWJsZSBudW1iZXI7
CiAgICAgQ1NTUGFyc2VyU3RyaW5nIHN0cmluZzsKLQotICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGU7
Ci0gICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+KiBydWxlTGlzdDsKLSAgICBDU1NQ
YXJzZXJTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4gPiogc2VsZWN0b3JMaXN0OwogICAgIENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlIG1h
cmdpbkJveDsKLSAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb247Ci0gICAgTWVkaWFR
dWVyeVNldCogbWVkaWFMaXN0OwotICAgIE1lZGlhUXVlcnkqIG1lZGlhUXVlcnk7Ci0gICAgTWVk
aWFRdWVyeTo6UmVzdHJpY3RvciBtZWRpYVF1ZXJ5UmVzdHJpY3RvcjsKLSAgICBNZWRpYVF1ZXJ5
RXhwKiBtZWRpYVF1ZXJ5RXhwOwogICAgIENTU1BhcnNlclZhbHVlIHZhbHVlOwotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVMaXN0OwotICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4
cD4gPiogbWVkaWFRdWVyeUV4cExpc3Q7Ci0gICAgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWU7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+KiBrZXlmcmFtZVJ1bGVMaXN0OwotICAg
IGZsb2F0IHZhbDsKLSAgICBDU1NQcm9wZXJ0eUlEIGlkOwotICAgIENTU1BhcnNlcjo6TG9jYXRp
b24gbG9jYXRpb247CiB9CiAKICV7CkBAIC04OCw5ICs2OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NTU1Rva2VuQVN0cmluZyhpbnQgeXl0eXBlKQogJX0KIAogI2lmIEVOQUJMRV9TSEFET1df
RE9NCi0lZXhwZWN0IDMyCi0jZWxzZQogJWV4cGVjdCAzMQorI2Vsc2UKKyVleHBlY3QgMzAKICNl
bmRpZgogCiAlbm9uYXNzb2MgTE9XRVNUX1BSRUMKQEAgLTEyMiwxMyArMTAyLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzQ1NTVG9rZW5BU3RyaW5nKGludCB5eXR5cGUpCiAldG9rZW4gSU1QT1JU
X1NZTQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFfU1lNCi0jaWYgRU5BQkxFX0NTUzNf
Q09ORElUSU9OQUxfUlVMRVMKLSV0b2tlbiBTVVBQT1JUU19TWU0KLSNlbmRpZgogJXRva2VuIEZP
TlRfRkFDRV9TWU0KLSNpZiBFTkFCTEVfU0hBRE9XX0RPTQotJXRva2VuIEhPU1RfU1lNCi0jZW5k
aWYKICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJG
VU5DVElPTgpAQCAtMTQxLDEyICsxMTUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tl
bkFTdHJpbmcoaW50IHl5dHlwZSkKICV0b2tlbiBXRUJLSVRfU0VMRUNUT1JfU1lNCiAldG9rZW4g
V0VCS0lUX1JFR0lPTl9SVUxFX1NZTQogJXRva2VuIFdFQktJVF9WSUVXUE9SVF9SVUxFX1NZTQot
I2lmIEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTCi0ldG9rZW4gV0VCS0lUX1NVUFBPUlRT
X0NPTkRJVElPTl9TWU0KLSNlbmRpZgotI2lmIEVOQUJMRV9DU1NfU0hBREVSUwotJXRva2VuIFdF
QktJVF9GSUxURVJfUlVMRV9TWU0KLSNlbmRpZgogJXRva2VuIDxtYXJnaW5Cb3g+IFRPUExFRlRD
T1JORVJfU1lNCiAldG9rZW4gPG1hcmdpbkJveD4gVE9QTEVGVF9TWU0KICV0b2tlbiA8bWFyZ2lu
Qm94PiBUT1BDRU5URVJfU1lNCkBAIC0xNzAsMTEgKzEzOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NTU1Rva2VuQVN0cmluZyhpbnQgeXl0eXBlKQogJXRva2VuIE1FRElBX09OTFkKICV0b2tl
biBNRURJQV9OT1QKICV0b2tlbiBNRURJQV9BTkQKLSNpZiBFTkFCTEVfQ1NTM19DT05ESVRJT05B
TF9SVUxFUwotJXRva2VuIFNVUFBPUlRTX05PVAotJXRva2VuIFNVUFBPUlRTX0FORAotJXRva2Vu
IFNVUFBPUlRTX09SCi0jZW5kaWYKIAogJXRva2VuIDxudW1iZXI+IFJFTVMKICV0b2tlbiA8bnVt
YmVyPiBDSFMKQEAgLTIxMSw5ICsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tl
bkFTdHJpbmcoaW50IHl5dHlwZSkKICV0b2tlbiA8c3RyaW5nPiBVUkkKICV0b2tlbiA8c3RyaW5n
PiBGVU5DVElPTgogJXRva2VuIDxzdHJpbmc+IEFOWUZVTkNUSU9OCi0jaWYgRU5BQkxFX1ZJREVP
X1RSQUNLCi0ldG9rZW4gPHN0cmluZz4gQ1VFRlVOQ1RJT04KLSNlbmRpZgogJXRva2VuIDxzdHJp
bmc+IE5PVEZVTkNUSU9OCiAldG9rZW4gPHN0cmluZz4gQ0FMQ0ZVTkNUSU9OCiAldG9rZW4gPHN0
cmluZz4gTUlORlVOQ1RJT04KQEAgLTIyMiwxMjQgKzE4MiwxMzcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzQ1NTVG9rZW5BU3RyaW5nKGludCB5eXR5cGUpCiAKICV0b2tlbiA8c3RyaW5nPiBVTklD
T0RFUkFOR0UKIAorJXVuaW9uIHsgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uOyB9CiAl
dHlwZSA8cmVsYXRpb24+IGNvbWJpbmF0b3IKIAotJXR5cGUgPHJ1bGU+IGNoYXJzZXQKLSV0eXBl
IDxydWxlPiBpZ25vcmVkX2NoYXJzZXQKLSV0eXBlIDxydWxlPiBydWxlc2V0Ci0ldHlwZSA8cnVs
ZT4gbWVkaWEKLSV0eXBlIDxydWxlPiBpbXBvcnQKLSV0eXBlIDxydWxlPiBuYW1lc3BhY2UKLSV0
eXBlIDxydWxlPiBwYWdlCi0ldHlwZSA8cnVsZT4gbWFyZ2luX2JveAotJXR5cGUgPHJ1bGU+IGZv
bnRfZmFjZQotI2lmIEVOQUJMRV9TSEFET1dfRE9NCi0ldHlwZSA8cnVsZT4gaG9zdAotI2VuZGlm
Ci0ldHlwZSA8cnVsZT4ga2V5ZnJhbWVzCi0ldHlwZSA8cnVsZT4gaW52YWxpZF9ydWxlCi0ldHlw
ZSA8cnVsZT4gc2F2ZV9ibG9jawotJXR5cGUgPHJ1bGU+IGludmFsaWRfYXQKLSV0eXBlIDxydWxl
PiBydWxlCi0ldHlwZSA8cnVsZT4gdmFsaWRfcnVsZQotJXR5cGUgPHJ1bGVMaXN0PiBibG9ja19y
dWxlX2xpc3QgCi0ldHlwZSA8cnVsZUxpc3Q+IHJlZ2lvbl9ibG9ja19ydWxlX2xpc3QKLSV0eXBl
IDxydWxlPiBibG9ja19ydWxlCi0ldHlwZSA8cnVsZT4gYmxvY2tfdmFsaWRfcnVsZQotJXR5cGUg
PHJ1bGU+IHJlZ2lvbgotI2lmIEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTCi0ldHlwZSA8
cnVsZT4gc3VwcG9ydHMKLSNlbmRpZgotI2lmIEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04K
LSV0eXBlIDxydWxlPiB2aWV3cG9ydAotI2VuZGlmCi0jaWYgRU5BQkxFX0NTU19TSEFERVJTCi0l
dHlwZSA8cnVsZT4gZmlsdGVyCi0jZW5kaWYKKyV1bmlvbiB7IFN0eWxlUnVsZUJhc2UqIHJ1bGU7
IH0KKyV0eXBlIDxydWxlPiBibG9ja19ydWxlIGJsb2NrX3ZhbGlkX3J1bGUgZm9udF9mYWNlIGlt
cG9ydCBrZXlmcmFtZXMgbWVkaWEgcGFnZSByZWdpb24gcnVsZSBydWxlc2V0IHZhbGlkX3J1bGUK
KyVkZXN0cnVjdG9yIHsgaWYgKCQkKSAkJC0+ZGVyZWYoKTsgfSBibG9ja19ydWxlIGJsb2NrX3Zh
bGlkX3J1bGUgZm9udF9mYWNlIGltcG9ydCBrZXlmcmFtZXMgbWVkaWEgcGFnZSByZWdpb24gcnVs
ZSBydWxlc2V0IHZhbGlkX3J1bGUKIAotJXR5cGUgPHN0cmluZz4gbWF5YmVfbnNfcHJlZml4Cisl
dW5pb24geyBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiogcnVsZUxpc3Q7IH0KKyV0eXBl
IDxydWxlTGlzdD4gYmxvY2tfcnVsZV9saXN0IGJsb2NrX3ZhbGlkX3J1bGVfbGlzdAorJWRlc3Ry
dWN0b3IgeyBkZWxldGUgJCQ7IH0gYmxvY2tfcnVsZV9saXN0IGJsb2NrX3ZhbGlkX3J1bGVfbGlz
dAogCi0ldHlwZSA8c3RyaW5nPiBuYW1lc3BhY2Vfc2VsZWN0b3IKKyV0eXBlIDxzdHJpbmc+IGlk
ZW50X29yX3N0cmluZyBtYXliZV9uc19wcmVmaXggbmFtZXNwYWNlX3NlbGVjdG9yIHN0cmluZ19v
cl91cmkKIAotJXR5cGUgPHN0cmluZz4gc3RyaW5nX29yX3VyaQotJXR5cGUgPHN0cmluZz4gaWRl
bnRfb3Jfc3RyaW5nCi0ldHlwZSA8c3RyaW5nPiBtZWRpdW0KICV0eXBlIDxtYXJnaW5Cb3g+IG1h
cmdpbl9zeW0KIAotJXR5cGUgPHN0cmluZz4gbWVkaWFfZmVhdHVyZQotJXR5cGUgPG1lZGlhTGlz
dD4gbWVkaWFfbGlzdAotJXR5cGUgPG1lZGlhTGlzdD4gbWF5YmVfbWVkaWFfbGlzdAorJXVuaW9u
IHsgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0OyB9CisldHlwZSA8bWVkaWFMaXN0PiBtZWRpYV9s
aXN0IG1heWJlX21lZGlhX2xpc3QKKyVkZXN0cnVjdG9yIHsgaWYgKCQkKSAkJC0+ZGVyZWYoKTsg
fSBtZWRpYV9saXN0IG1heWJlX21lZGlhX2xpc3QKKworJXVuaW9uIHsgTWVkaWFRdWVyeSogbWVk
aWFRdWVyeTsgfQogJXR5cGUgPG1lZGlhUXVlcnk+IG1lZGlhX3F1ZXJ5CislZGVzdHJ1Y3RvciB7
IGRlbGV0ZSAkJDsgfSBtZWRpYV9xdWVyeQorCisldW5pb24geyBNZWRpYVF1ZXJ5OjpSZXN0cmlj
dG9yIG1lZGlhUXVlcnlSZXN0cmljdG9yOyB9CiAldHlwZSA8bWVkaWFRdWVyeVJlc3RyaWN0b3I+
IG1heWJlX21lZGlhX3Jlc3RyaWN0b3IKLSV0eXBlIDx2YWx1ZUxpc3Q+IG1heWJlX21lZGlhX3Zh
bHVlCisKKyV1bmlvbiB7IE1lZGlhUXVlcnlFeHAqIG1lZGlhUXVlcnlFeHA7IH0KICV0eXBlIDxt
ZWRpYVF1ZXJ5RXhwPiBtZWRpYV9xdWVyeV9leHAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4g
bWVkaWFfcXVlcnlfZXhwX2xpc3QKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4gbWF5YmVfYW5k
X21lZGlhX3F1ZXJ5X2V4cF9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtZWRpYV9x
dWVyeV9leHAKIAotI2lmIEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTCi0ldHlwZSA8Ym9v
bGVhbj4gc3VwcG9ydHNfY29uZGl0aW9uCi0ldHlwZSA8Ym9vbGVhbj4gc3VwcG9ydHNfY29uZGl0
aW9uX2luX3BhcmVucwotJXR5cGUgPGJvb2xlYW4+IHN1cHBvcnRzX25lZ2F0aW9uCi0ldHlwZSA8
Ym9vbGVhbj4gc3VwcG9ydHNfY29uanVuY3Rpb24KLSV0eXBlIDxib29sZWFuPiBzdXBwb3J0c19k
aXNqdW5jdGlvbgotJXR5cGUgPGJvb2xlYW4+IHN1cHBvcnRzX2RlY2xhcmF0aW9uX2NvbmRpdGlv
bgotJXR5cGUgPGJvb2xlYW4+IHN1cHBvcnRzX2Vycm9yCi0jZW5kaWYKKyV1bmlvbiB7IFZlY3Rv
cjxPd25QdHI8TWVkaWFRdWVyeUV4cD4+KiBtZWRpYVF1ZXJ5RXhwTGlzdDsgfQorJXR5cGUgPG1l
ZGlhUXVlcnlFeHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVl
cnlfZXhwX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlhX3F1ZXJ5X2V4cF9s
aXN0IG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdAogCiAldHlwZSA8c3RyaW5nPiBrZXlm
cmFtZV9uYW1lCisKKyV1bmlvbiB7IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lOyB9CiAldHlwZSA8
a2V5ZnJhbWU+IGtleWZyYW1lX3J1bGUKKyVkZXN0cnVjdG9yIHsgaWYgKCQkKSAkJC0+ZGVyZWYo
KTsgfSBrZXlmcmFtZV9ydWxlCisKKyV1bmlvbiB7IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4+KiBrZXlmcmFtZVJ1bGVMaXN0OyB9CiAldHlwZSA8a2V5ZnJhbWVSdWxlTGlzdD4ga2V5ZnJh
bWVzX3J1bGUKLSV0eXBlIDx2YWx1ZUxpc3Q+IGtleV9saXN0Ci0ldHlwZSA8dmFsdWU+IGtleQor
JWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0ga2V5ZnJhbWVzX3J1bGUKKworLy8gVGhlc2UgdHdv
IHBhcnNlciB2YWx1ZXMgbmV2ZXIgbmVlZCB0byBiZSBkZXN0cm95ZWQgYmVjYXVzZSB0aGV5IGFy
ZSBuZXZlciBmdW5jdGlvbnMuCisldHlwZSA8dmFsdWU+IGtleSB1bmFyeV90ZXJtCiAKKy8vIFRo
ZXNlIHBhcnNlciB2YWx1ZXMgbmVlZCB0byBiZSBkZXN0cm95ZWQgYmVjYXVzZSB0aGV5IG1pZ2h0
IGJlIGZ1bmN0aW9ucy4KKyV0eXBlIDx2YWx1ZT4gY2FsY19mdW5jX3Rlcm0gY2FsY19mdW5jdGlv
biBmdW5jdGlvbiBtaW5fb3JfbWF4X2Z1bmN0aW9uIHRlcm0KKyVkZXN0cnVjdG9yIHsgZGVzdHJv
eSgkJCk7IH0gY2FsY19mdW5jX3Rlcm0gY2FsY19mdW5jdGlvbiBmdW5jdGlvbiBtaW5fb3JfbWF4
X2Z1bmN0aW9uIHRlcm0KKworJXVuaW9uIHsgQ1NTUHJvcGVydHlJRCBpZDsgfQogJXR5cGUgPGlk
PiBwcm9wZXJ0eQogCi0ldHlwZSA8c2VsZWN0b3I+IHNwZWNpZmllcgotJXR5cGUgPHNlbGVjdG9y
PiBzcGVjaWZpZXJfbGlzdAotJXR5cGUgPHNlbGVjdG9yPiBzaW1wbGVfc2VsZWN0b3IKLSV0eXBl
IDxzZWxlY3Rvcj4gc2VsZWN0b3IKLSV0eXBlIDxzZWxlY3Rvckxpc3Q+IHNlbGVjdG9yX2xpc3QK
LSV0eXBlIDxzZWxlY3Rvckxpc3Q+IHNpbXBsZV9zZWxlY3Rvcl9saXN0Ci0ldHlwZSA8c2VsZWN0
b3JMaXN0PiByZWdpb25fc2VsZWN0b3IKLSV0eXBlIDxzZWxlY3Rvcj4gc2VsZWN0b3Jfd2l0aF90
cmFpbGluZ193aGl0ZXNwYWNlCi0ldHlwZSA8c2VsZWN0b3I+IGNsYXNzCi0ldHlwZSA8c2VsZWN0
b3I+IGF0dHJpYgotJXR5cGUgPHNlbGVjdG9yPiBwc2V1ZG8KLSV0eXBlIDxzZWxlY3Rvcj4gcHNl
dWRvX3BhZ2UKLSV0eXBlIDxzZWxlY3Rvcj4gcGFnZV9zZWxlY3RvcgotCi0ldHlwZSA8Ym9vbGVh
bj4gZGVjbGFyYXRpb25fbGlzdAotJXR5cGUgPGJvb2xlYW4+IGRlY2xfbGlzdAotJXR5cGUgPGJv
b2xlYW4+IGRlY2xhcmF0aW9uCi0ldHlwZSA8Ym9vbGVhbj4gZGVjbGFyYXRpb25zX2FuZF9tYXJn
aW5zCi0KLSV0eXBlIDxib29sZWFuPiBwcmlvCi0KLSV0eXBlIDxpbnRlZ2VyPiBtYXRjaAotJXR5
cGUgPGludGVnZXI+IHVuYXJ5X29wZXJhdG9yCi0ldHlwZSA8aW50ZWdlcj4gbWF5YmVfdW5hcnlf
b3BlcmF0b3IKLSV0eXBlIDxjaGFyYWN0ZXI+IG9wZXJhdG9yCi0KLSV0eXBlIDx2YWx1ZUxpc3Q+
IGV4cHIKLSV0eXBlIDx2YWx1ZUxpc3Q+IHZhbGlkX2V4cHIKLSV0eXBlIDx2YWx1ZT4gdGVybQot
JXR5cGUgPHZhbHVlPiB1bmFyeV90ZXJtCi0ldHlwZSA8dmFsdWU+IGZ1bmN0aW9uCi0ldHlwZSA8
dmFsdWU+IGNhbGNfZnVuY190ZXJtCi0ldHlwZSA8Y2hhcmFjdGVyPiBjYWxjX2Z1bmNfb3BlcmF0
b3IKLSV0eXBlIDx2YWx1ZUxpc3Q+IGNhbGNfZnVuY19leHByCi0ldHlwZSA8dmFsdWVMaXN0PiB2
YWxpZF9jYWxjX2Z1bmNfZXhwcgotJXR5cGUgPHZhbHVlTGlzdD4gY2FsY19mdW5jX2V4cHJfbGlz
dAotJXR5cGUgPHZhbHVlTGlzdD4gY2FsY19mdW5jX3BhcmVuX2V4cHIKLSV0eXBlIDx2YWx1ZT4g
Y2FsY19mdW5jdGlvbgorJXVuaW9uIHsgQ1NTUGFyc2VyU2VsZWN0b3IqIHNlbGVjdG9yOyB9Cisl
dHlwZSA8c2VsZWN0b3I+IGF0dHJpYiBjbGFzcyBwYWdlX3NlbGVjdG9yIHBzZXVkbyBwc2V1ZG9f
cGFnZSBzZWxlY3RvciBzaW1wbGVfc2VsZWN0b3Igc3BlY2lmaWVyIHNwZWNpZmllcl9saXN0Cisl
ZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBhdHRyaWIgY2xhc3MgcGFnZV9zZWxlY3RvciBwc2V1
ZG8gcHNldWRvX3BhZ2Ugc2VsZWN0b3Igc2ltcGxlX3NlbGVjdG9yIHNwZWNpZmllciBzcGVjaWZp
ZXJfbGlzdAorCisldW5pb24geyBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHNl
bGVjdG9yTGlzdDsgfQorJXR5cGUgPHNlbGVjdG9yTGlzdD4gc2VsZWN0b3JfbGlzdCBzaW1wbGVf
c2VsZWN0b3JfbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gc2VsZWN0b3JfbGlzdCBz
aW1wbGVfc2VsZWN0b3JfbGlzdAorCisldW5pb24geyBib29sIGJvb2xlYW47IH0KKyV0eXBlIDxi
b29sZWFuPiBkZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGRlY2xfbGlzdCBwcmlvcml0eQor
CisldW5pb24geyBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2g7IH0KKyV0eXBlIDxtYXRjaD4gbWF0
Y2gKKworJXVuaW9uIHsgaW50IGludGVnZXI7IH0KKyV0eXBlIDxpbnRlZ2VyPiB1bmFyeV9vcGVy
YXRvciBtYXliZV91bmFyeV9vcGVyYXRvcgorCisldW5pb24geyBjaGFyIGNoYXJhY3RlcjsgfQor
JXR5cGUgPGNoYXJhY3Rlcj4gb3BlcmF0b3IgY2FsY19mdW5jX29wZXJhdG9yCisKKyV1bmlvbiB7
IENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0OyB9CisldHlwZSA8dmFsdWVMaXN0PiBjYWxj
X2Z1bmNfZXhwciBjYWxjX2Z1bmNfZXhwcl9saXN0IGNhbGNfZnVuY19wYXJlbl9leHByIGV4cHIg
a2V5X2xpc3QgbWF5YmVfbWVkaWFfdmFsdWUgdmFsaWRfY2FsY19mdW5jX2V4cHIgdmFsaWRfZXhw
cgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gY2FsY19mdW5jX2V4cHIgY2FsY19mdW5jX2V4
cHJfbGlzdCBjYWxjX2Z1bmNfcGFyZW5fZXhwciBleHByIGtleV9saXN0IG1heWJlX21lZGlhX3Zh
bHVlIHZhbGlkX2NhbGNfZnVuY19leHByIHZhbGlkX2V4cHIKKwogJXR5cGUgPHN0cmluZz4gbWlu
X29yX21heAotJXR5cGUgPHZhbHVlPiBtaW5fb3JfbWF4X2Z1bmN0aW9uCiAKICV0eXBlIDxzdHJp
bmc+IGVsZW1lbnRfbmFtZQotJXR5cGUgPHN0cmluZz4gYXR0cl9uYW1lCiAKKyV1bmlvbiB7IENT
U1BhcnNlcjo6TG9jYXRpb24gbG9jYXRpb247IH0KICV0eXBlIDxsb2NhdGlvbj4gZXJyb3JfbG9j
YXRpb24KIAorI2lmIEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTCisKKyV0b2tlbiBTVVBQ
T1JUU19BTkQKKyV0b2tlbiBTVVBQT1JUU19OT1QKKyV0b2tlbiBTVVBQT1JUU19PUgorJXRva2Vu
IFNVUFBPUlRTX1NZTQorJXRva2VuIFdFQktJVF9TVVBQT1JUU19DT05ESVRJT05fU1lNCisKKyV0
eXBlIDxydWxlPiBzdXBwb3J0cworJWRlc3RydWN0b3IgeyBpZiAoJCQpICQkLT5kZXJlZigpOyB9
IHN1cHBvcnRzCisKKyV0eXBlIDxib29sZWFuPiBzdXBwb3J0c19jb25kaXRpb24gc3VwcG9ydHNf
Y29uZGl0aW9uX2luX3BhcmVucyBzdXBwb3J0c19jb25qdW5jdGlvbiBzdXBwb3J0c19kZWNsYXJh
dGlvbl9jb25kaXRpb24gc3VwcG9ydHNfZGlzanVuY3Rpb24gc3VwcG9ydHNfZXJyb3Igc3VwcG9y
dHNfbmVnYXRpb24KKworI2VuZGlmCisKKyNpZiBFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9O
CisKKyV0eXBlIDxydWxlPiB2aWV3cG9ydAorJWRlc3RydWN0b3IgeyBpZiAoJCQpICQkLT5kZXJl
ZigpOyB9IHZpZXdwb3J0CisKKyNlbmRpZgorCisjaWYgRU5BQkxFX0NTU19TSEFERVJTCisKKyV0
b2tlbiBXRUJLSVRfRklMVEVSX1JVTEVfU1lNCisKKyV0eXBlIDxydWxlPiBmaWx0ZXIKKyVkZXN0
cnVjdG9yIHsgaWYgKCQkKSAkJC0+ZGVyZWYoKTsgfSBmaWx0ZXIKKworI2VuZGlmCisKKyNpZiBF
TkFCTEVfU0hBRE9XX0RPTQorCisldG9rZW4gSE9TVF9TWU0KKworJXR5cGUgPHJ1bGU+IGhvc3QK
KyVkZXN0cnVjdG9yIHsgaWYgKCQkKSAkJC0+ZGVyZWYoKTsgfSBob3N0CisKKyNlbmRpZgorCisj
aWYgRU5BQkxFX1ZJREVPX1RSQUNLCisKKyV0b2tlbiA8c3RyaW5nPiBDVUVGVU5DVElPTgorCisj
ZW5kaWYKKwogJSUKIAogc3R5bGVzaGVldDoKQEAgLTM1NSwyOCArMzI4LDE2IEBAIHN0eWxlc2hl
ZXQ6CiAjZW5kaWYKICAgOwogCi13ZWJraXRfcnVsZToKLSAgICBXRUJLSVRfUlVMRV9TWU0gJ3sn
IG1heWJlX3NwYWNlIHZhbGlkX3J1bGUgbWF5YmVfc3BhY2UgJ30nIHsKLSAgICAgICAgcGFyc2Vy
LT5tX3J1bGUgPSAkNDsKLSAgICB9Ci07Cit3ZWJraXRfcnVsZTogV0VCS0lUX1JVTEVfU1lNICd7
JyBtYXliZV9zcGFjZSB2YWxpZF9ydWxlIG1heWJlX3NwYWNlICd9JyB7IHBhcnNlci0+bV9ydWxl
ID0gJDQ7IH0gOwogCi13ZWJraXRfa2V5ZnJhbWVfcnVsZToKLSAgICBXRUJLSVRfS0VZRlJBTUVf
UlVMRV9TWU0gJ3snIG1heWJlX3NwYWNlIGtleWZyYW1lX3J1bGUgbWF5YmVfc3BhY2UgJ30nIHsK
LSAgICAgICAgcGFyc2VyLT5tX2tleWZyYW1lID0gJDQ7Ci0gICAgfQotOword2Via2l0X2tleWZy
YW1lX3J1bGU6IFdFQktJVF9LRVlGUkFNRV9SVUxFX1NZTSAneycgbWF5YmVfc3BhY2Uga2V5ZnJh
bWVfcnVsZSBtYXliZV9zcGFjZSAnfScgeyBwYXJzZXItPm1fa2V5ZnJhbWUgPSBhZG9wdFJlZigk
NCk7IH0gOwogCi13ZWJraXRfZGVjbHM6Ci0gICAgV0VCS0lUX0RFQ0xTX1NZTSAneycgbWF5YmVf
c3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgJ30nIHsKLSAgICAgICAg
LyogY2FuIGJlIGVtcHR5ICovCi0gICAgfQotOword2Via2l0X2RlY2xzOiBXRUJLSVRfREVDTFNf
U1lNICd7JyBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCAn
fScgOwogCiB3ZWJraXRfdmFsdWU6CiAgICAgV0VCS0lUX1ZBTFVFX1NZTSAneycgbWF5YmVfc3Bh
Y2UgZXhwciAnfScgewogICAgICAgICBpZiAoJDQpIHsKLSAgICAgICAgICAgIHBhcnNlci0+bV92
YWx1ZUxpc3QgPSBwYXJzZXItPnNpbmtGbG9hdGluZ1ZhbHVlTGlzdCgkNCk7CisgICAgICAgICAg
ICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gYWRvcHRQdHIoJDQpOwogICAgICAgICAgICAgaW50IG9s
ZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlci0+cGFyc2VWYWx1ZShwYXJzZXItPm1faWQsIHBhcnNlci0+
bV9pbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVy
dGllcyhwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQcm9wZXJ0
aWVzKTsKQEAgLTM4NSw1NSArMzQ2LDMzIEBAIHdlYmtpdF92YWx1ZToKICAgICB9CiA7CiAKLXdl
YmtpdF9tZWRpYXF1ZXJ5OgotICAgICBXRUJLSVRfTUVESUFRVUVSWV9TWU0gV0hJVEVTUEFDRSBt
YXliZV9zcGFjZSBtZWRpYV9xdWVyeSAnfScgewotICAgICAgICAgcGFyc2VyLT5tX21lZGlhUXVl
cnkgPSBwYXJzZXItPnNpbmtGbG9hdGluZ01lZGlhUXVlcnkoJDQpOwotICAgICB9Ci07Cit3ZWJr
aXRfbWVkaWFxdWVyeTogV0VCS0lUX01FRElBUVVFUllfU1lNIFdISVRFU1BBQ0UgbWF5YmVfc3Bh
Y2UgbWVkaWFfcXVlcnkgJ30nIHsgcGFyc2VyLT5tX21lZGlhUXVlcnkgPSBhZG9wdFB0cigkNCk7
IH0gOwogCiB3ZWJraXRfc2VsZWN0b3I6CiAgICAgV0VCS0lUX1NFTEVDVE9SX1NZTSAneycgbWF5
YmVfc3BhY2Ugc2VsZWN0b3JfbGlzdCAnfScgewogICAgICAgICBpZiAoJDQpIHsKICAgICAgICAg
ICAgIGlmIChwYXJzZXItPm1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvcikKICAgICAgICAg
ICAgICAgICBwYXJzZXItPm1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3Rvci0+YWRvcHRTZWxl
Y3RvclZlY3RvcigqJDQpOworICAgICAgICAgICAgcGFyc2VyLT5yZWN5Y2xlU2VsZWN0b3JWZWN0
b3IoYWRvcHRQdHIoJDQpKTsKICAgICAgICAgfQogICAgIH0KIDsKIAogI2lmIEVOQUJMRV9DU1Mz
X0NPTkRJVElPTkFMX1JVTEVTCi13ZWJraXRfc3VwcG9ydHNfY29uZGl0aW9uOgotICAgIFdFQktJ
VF9TVVBQT1JUU19DT05ESVRJT05fU1lNICd7JyBtYXliZV9zcGFjZSBzdXBwb3J0c19jb25kaXRp
b24gJ30nIHsKLSAgICAgICAgcGFyc2VyLT5tX3N1cHBvcnRzQ29uZGl0aW9uID0gJDQ7Ci0gICAg
fQotOworCit3ZWJraXRfc3VwcG9ydHNfY29uZGl0aW9uOiBXRUJLSVRfU1VQUE9SVFNfQ09ORElU
SU9OX1NZTSAneycgbWF5YmVfc3BhY2Ugc3VwcG9ydHNfY29uZGl0aW9uICd9JyB7IHBhcnNlci0+
bV9zdXBwb3J0c0NvbmRpdGlvbiA9ICQ0OyB9IDsKKwogI2VuZGlmCiAKLW1heWJlX3NwYWNlOgot
ICAgIC8qIGVtcHR5ICovICVwcmVjIFVOSU1QT1JUQU5UX1RPSwotICB8IG1heWJlX3NwYWNlIFdI
SVRFU1BBQ0UKLSAgOworbWF5YmVfc3BhY2U6IC8qIGVtcHR5ICovICVwcmVjIFVOSU1QT1JUQU5U
X1RPSyB8IG1heWJlX3NwYWNlIFdISVRFU1BBQ0UgOwogCi1tYXliZV9zZ21sOgotICAgIC8qIGVt
cHR5ICovCi0gIHwgbWF5YmVfc2dtbCBTR01MX0NECi0gIHwgbWF5YmVfc2dtbCBXSElURVNQQUNF
Ci0gIDsKK21heWJlX3NnbWw6IC8qIGVtcHR5ICovIHwgbWF5YmVfc2dtbCBTR01MX0NEIHwgbWF5
YmVfc2dtbCBXSElURVNQQUNFIDsKIAotbWF5YmVfY2hhcnNldDoKLSAgIC8qIGVtcHR5ICovCi0g
IHwgY2hhcnNldCB7Ci0gIH0KLSAgOworbWF5YmVfY2hhcnNldDogLyogZW1wdHkgKi8gfCBjaGFy
c2V0IDsKIAotY2xvc2luZ19icmFjZToKLSAgICAnfScKLSAgfCAlcHJlYyBMT1dFU1RfUFJFQyBU
T0tFTl9FT0YKLSAgOworY2xvc2luZ19icmFjZTogJ30nIHwgJXByZWMgTE9XRVNUX1BSRUMgVE9L
RU5fRU9GIDsKIAotY2xvc2luZ19wYXJlbnRoZXNpczoKLSAgICAnKScKLSAgfCAlcHJlYyBMT1dF
U1RfUFJFQyBUT0tFTl9FT0YKLSAgOworY2xvc2luZ19wYXJlbnRoZXNpczogJyknIHwgJXByZWMg
TE9XRVNUX1BSRUMgVE9LRU5fRU9GIDsKIAogY2hhcnNldDoKICAgQ0hBUlNFVF9TWU0gbWF5YmVf
c3BhY2UgU1RSSU5HIG1heWJlX3NwYWNlICc7JyB7CkBAIC00NDEsMzEgKzM4MCwyMyBAQCBjaGFy
c2V0OgogICAgICAgICAgcGFyc2VyLT5tX3N0eWxlU2hlZXQtPnBhcnNlclNldEVuY29kaW5nRnJv
bUNoYXJzZXRSdWxlKCQzKTsKICAgICAgaWYgKHBhcnNlci0+aXNFeHRyYWN0aW5nU291cmNlRGF0
YSgpICYmIHBhcnNlci0+bV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpICYmIHBhcnNl
ci0+bV9ydWxlU291cmNlRGF0YVJlc3VsdCkKICAgICAgICAgIHBhcnNlci0+YWRkTmV3UnVsZVRv
U291cmNlVHJlZShDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKLSAgICAgJCQg
PSAwOwotICB9Ci0gIHwgQ0hBUlNFVF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7Ci0gIH0KLSAg
fCBDSEFSU0VUX1NZTSBlcnJvciAnOycgewogICB9CisgIHwgQ0hBUlNFVF9TWU0gZXJyb3IgaW52
YWxpZF9ibG9jaworICB8IENIQVJTRVRfU1lNIGVycm9yICc7JwogOwogCi1pZ25vcmVkX2NoYXJz
ZXQ6Ci0gICAgQ0hBUlNFVF9TWU0gbWF5YmVfc3BhY2UgU1RSSU5HIG1heWJlX3NwYWNlICc7JyB7
Ci0gICAgICAgIC8vIElnbm9yZSBhbnkgQGNoYXJzZXQgcnVsZSBub3QgYXQgdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgc3R5bGUgc2hlZXQuCi0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gICAgfCBDSEFS
U0VUX1NZTSBtYXliZV9zcGFjZSAnOycgewotICAgICAgICAkJCA9IDA7Ci0gICAgfQotOworLy8g
SWdub3JlIGFueSBAY2hhcnNldCBydWxlIG5vdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHls
ZSBzaGVldC4KK2lnbm9yZWRfY2hhcnNldDogQ0hBUlNFVF9TWU0gbWF5YmVfc3BhY2UgU1RSSU5H
IG1heWJlX3NwYWNlICc7JyB8IENIQVJTRVRfU1lNIG1heWJlX3NwYWNlICc7JyA7CiAKIHJ1bGVf
bGlzdDoKLSAgIC8qIGVtcHR5ICovCi0gfCBydWxlX2xpc3QgcnVsZSBtYXliZV9zZ21sIHsKLSAg
ICAgaWYgKCQyICYmIHBhcnNlci0+bV9zdHlsZVNoZWV0KQotICAgICAgICAgcGFyc2VyLT5tX3N0
eWxlU2hlZXQtPnBhcnNlckFwcGVuZFJ1bGUoJDIpOwotIH0KLSA7CisgICAgLyogZW1wdHkgKi8K
KyAgICB8IHJ1bGVfbGlzdCBydWxlIG1heWJlX3NnbWwgeworICAgICAgICBpZiAoUmVmUHRyPFN0
eWxlUnVsZUJhc2U+IHJ1bGUgPSBhZG9wdFJlZigkMikpIHsKKyAgICAgICAgICAgIGlmIChwYXJz
ZXItPm1fc3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICBwYXJzZXItPm1fc3R5bGVTaGVldC0+
cGFyc2VyQXBwZW5kUnVsZShydWxlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
OwogCiB2YWxpZF9ydWxlOgogICAgIHJ1bGVzZXQKQEAgLTQ3Myw3ICs0MDQsNyBAQCB2YWxpZF9y
dWxlOgogICB8IHBhZ2UKICAgfCBmb250X2ZhY2UKICAgfCBrZXlmcmFtZXMKLSAgfCBuYW1lc3Bh
Y2UKKyAgfCBuYW1lc3BhY2UgeyAkJCA9IDA7IH0KICAgfCBpbXBvcnQKICAgfCByZWdpb24KICNp
ZiBFTkFCTEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUwpAQCAtNDkyLDMzICs0MjMsMzQgQEAgdmFs
aWRfcnVsZToKIAogcnVsZToKICAgICB2YWxpZF9ydWxlIHsKKyAgICAgICAgJCQgPSAkMTsKICAg
ICAgICAgcGFyc2VyLT5tX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENTU1J1bGUgPSB0cnVlOwogICAg
IH0KLSAgfCBpZ25vcmVkX2NoYXJzZXQKLSAgfCBpbnZhbGlkX3J1bGUKLSAgfCBpbnZhbGlkX2F0
Ci0gIDsKKyAgICB8IGlnbm9yZWRfY2hhcnNldCB7ICQkID0gMDsgfQorICAgIHwgaW52YWxpZF9y
dWxlIHsgJCQgPSAwOyB9CisgICAgfCBpbnZhbGlkX2F0IHsgJCQgPSAwOyB9CisgICAgOwogCiBi
bG9ja19ydWxlX2xpc3Q6IAogICAgIC8qIGVtcHR5ICovIHsgJCQgPSAwOyB9CiAgIHwgYmxvY2tf
cnVsZV9saXN0IGJsb2NrX3J1bGUgbWF5YmVfc2dtbCB7CiAgICAgICAkJCA9ICQxOwotICAgICAg
aWYgKCQyKSB7CisgICAgICBpZiAoUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBhZG9wdFJl
ZigkMikpIHsKICAgICAgICAgICBpZiAoISQkKQotICAgICAgICAgICAgICAkJCA9IHBhcnNlci0+
Y3JlYXRlUnVsZUxpc3QoKTsKLSAgICAgICAgICAkJC0+YXBwZW5kKCQyKTsKKyAgICAgICAgICAg
ICAgJCQgPSBuZXcgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj47CisgICAgICAgICAgJCQt
PmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgICB9CiAgIH0KICAgOwogCi1yZWdpb25fYmxv
Y2tfcnVsZV9saXN0OgorYmxvY2tfdmFsaWRfcnVsZV9saXN0OgogICAgIC8qIGVtcHR5ICovIHsg
JCQgPSAwOyB9Ci0gIHwgcmVnaW9uX2Jsb2NrX3J1bGVfbGlzdCBibG9ja192YWxpZF9ydWxlIG1h
eWJlX3NnbWwgeworICB8IGJsb2NrX3ZhbGlkX3J1bGVfbGlzdCBibG9ja192YWxpZF9ydWxlIG1h
eWJlX3NnbWwgewogICAgICAgJCQgPSAkMTsKLSAgICAgIGlmICgkMikgeworICAgICAgaWYgKFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlID0gYWRvcHRSZWYoJDIpKSB7CiAgICAgICAgICAgaWYg
KCEkJCkKLSAgICAgICAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZVJ1bGVMaXN0KCk7Ci0gICAg
ICAgICAgJCQtPmFwcGVuZCgkMik7CisgICAgICAgICAgICAgICQkID0gbmV3IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4+OworICAgICAgICAgICQkLT5hcHBlbmQocnVsZS5yZWxlYXNlKCkp
OwogICAgICAgfQogICB9CiAgIDsKQEAgLTU0MCwxNCArNDcyLDcgQEAgYmxvY2tfdmFsaWRfcnVs
ZToKICNlbmRpZgogICA7CiAKLWJsb2NrX3J1bGU6Ci0gICAgYmxvY2tfdmFsaWRfcnVsZQotICB8
IGludmFsaWRfcnVsZQotICB8IGludmFsaWRfYXQKLSAgfCBuYW1lc3BhY2UKLSAgfCBpbXBvcnQK
LSAgfCByZWdpb24KLSAgOworYmxvY2tfcnVsZTogYmxvY2tfdmFsaWRfcnVsZSB8IGludmFsaWRf
cnVsZSB7ICQkID0gMDsgfSB8IGludmFsaWRfYXQgeyAkJCA9IDA7IH0gfCBuYW1lc3BhY2UgeyAk
JCA9IDA7IH0gfCBpbXBvcnQgfCByZWdpb24gOwogCiBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXli
ZV9zcGFjZToKICAgICBtYXliZV9zcGFjZSB7CkBAIC01NjQsMTQgKzQ4OSwxNiBAQCBiZWZvcmVf
aW1wb3J0X3J1bGU6CiAKIGltcG9ydDoKICAgICBiZWZvcmVfaW1wb3J0X3J1bGUgSU1QT1JUX1NZ
TSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3Nw
YWNlIG1heWJlX21lZGlhX2xpc3QgJzsnIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUlt
cG9ydFJ1bGUoJDQsICQ2KTsKKyAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUltcG9ydFJ1bGUo
JDQsIGFkb3B0UmVmKCQ2KSkubGVha1JlZigpOwogICAgIH0KICAgfCBiZWZvcmVfaW1wb3J0X3J1
bGUgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3Jf
dXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgVE9LRU5fRU9GIHsKLSAgICAgICAgJCQg
PSBwYXJzZXItPmNyZWF0ZUltcG9ydFJ1bGUoJDQsICQ2KTsKKyAgICAgICAgJCQgPSBwYXJzZXIt
PmNyZWF0ZUltcG9ydFJ1bGUoJDQsIGFkb3B0UmVmKCQ2KSkubGVha1JlZigpOwogICAgIH0KICAg
fCBiZWZvcmVfaW1wb3J0X3J1bGUgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXli
ZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgaW52YWxp
ZF9ibG9jayB7CiAgICAgICAgICQkID0gMDsKICAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgp
OworICAgICAgICBpZiAoJDYpCisgICAgICAgICAgICAkNi0+ZGVyZWYoKTsKICAgICB9CiAgIHwg
YmVmb3JlX2ltcG9ydF9ydWxlIElNUE9SVF9TWU0gZXJyb3IgJzsnIHsKICAgICAgICAgJCQgPSAw
OwpAQCAtNTg0LDczICs1MTEsNDYgQEAgaW1wb3J0OgogICA7CiAKIG5hbWVzcGFjZToKLU5BTUVT
UEFDRV9TWU0gbWF5YmVfc3BhY2UgbWF5YmVfbnNfcHJlZml4IHN0cmluZ19vcl91cmkgbWF5YmVf
c3BhY2UgJzsnIHsKLSAgICBwYXJzZXItPmFkZE5hbWVzcGFjZSgkMywgJDQpOwotICAgICQkID0g
MDsKLX0KLXwgTkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaXggc3RyaW5n
X29yX3VyaSBtYXliZV9zcGFjZSBpbnZhbGlkX2Jsb2NrIHsKLSAgICAkJCA9IDA7Ci19Ci18IE5B
TUVTUEFDRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7Ci0gICAgJCQgPSAwOwotfQotfCBOQU1F
U1BBQ0VfU1lNIGVycm9yICc7JyB7Ci0gICAgJCQgPSAwOwotfQotOwotCi1tYXliZV9uc19wcmVm
aXg6Ci0vKiBlbXB0eSAqLyB7ICQkLmNsZWFyKCk7IH0KLXwgSURFTlQgbWF5YmVfc3BhY2UgeyAk
JCA9ICQxOyB9Ci07CisgICAgTkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVm
aXggc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSAnOycgeyBwYXJzZXItPmFkZE5hbWVzcGFjZSgk
MywgJDQpOyB9CisgICAgfCBOQU1FU1BBQ0VfU1lNIG1heWJlX3NwYWNlIG1heWJlX25zX3ByZWZp
eCBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIGludmFsaWRfYmxvY2sKKyAgICB8IE5BTUVTUEFD
RV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jaworICAgIHwgTkFNRVNQQUNFX1NZTSBlcnJvciAnOycK
KyAgICA7CiAKLXN0cmluZ19vcl91cmk6Ci1TVFJJTkcKLXwgVVJJCi07CittYXliZV9uc19wcmVm
aXg6IC8qIGVtcHR5ICovIHsgJCQuY2xlYXIoKTsgfSB8IElERU5UIG1heWJlX3NwYWNlOwogCi1t
ZWRpYV9mZWF0dXJlOgotICAgIElERU5UIG1heWJlX3NwYWNlIHsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICB9Ci0gICAgOworc3RyaW5nX29yX3VyaTogU1RSSU5HIHwgVVJJIDsKIAotbWF5YmVfbWVk
aWFfdmFsdWU6Ci0gICAgLyplbXB0eSovIHsKLSAgICAgICAgJCQgPSAwOwotICAgIH0KLSAgICB8
ICc6JyBtYXliZV9zcGFjZSBleHByIG1heWJlX3NwYWNlIHsKLSAgICAgICAgJCQgPSAkMzsKLSAg
ICB9Ci0gICAgOworbWF5YmVfbWVkaWFfdmFsdWU6IC8qZW1wdHkqLyB7ICQkID0gMDsgfSB8ICc6
JyBtYXliZV9zcGFjZSBleHByIG1heWJlX3NwYWNlIHsgJCQgPSAkMzsgfSA7CiAKIG1lZGlhX3F1
ZXJ5X2V4cDoKLSAgICBtYXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlICcoJyBtYXli
ZV9zcGFjZSBtZWRpYV9mZWF0dXJlIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX3ZhbHVlICcpJyBt
YXliZV9zcGFjZSB7CisgICAgbWF5YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSAnKCcg
bWF5YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfdmFsdWUgJyknIG1heWJl
X3NwYWNlIHsKICAgICAgICAgLy8gSWYgcmVzdHJpY3RvciBpcyBzcGVjaWZpZWQsIG1lZGlhIHF1
ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC4KICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5IG1lZGlh
IHF1ZXJ5IGV4cHJlc3Npb24gYW5kIGNvbnRpbnVlIHBhcnNpbmcgbWVkaWEgcXVlcnkuCisgICAg
ICAgIE93blB0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IG1lZGlhVmFsdWUgPSBhZG9wdFB0cigkNyk7
CiAgICAgICAgIGlmICgkMSAhPSBNZWRpYVF1ZXJ5OjpOb25lKQotICAgICAgICAgICAgJCQgPSBw
YXJzZXItPmNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeUV4cCgiIiwgMCk7CisgICAgICAgICAgICAk
JCA9IE1lZGlhUXVlcnlFeHA6OmNyZWF0ZShlbXB0eVN0cmluZygpLCBudWxscHRyKS5sZWFrUHRy
KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgJDUubG93ZXIoKTsKLSAgICAgICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHAoJDUsICQ3KTsKKyAgICAg
ICAgICAgICQkID0gTWVkaWFRdWVyeUV4cDo6Y3JlYXRlKCQ1LCBtZWRpYVZhbHVlLmdldCgpKS5s
ZWFrUHRyKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgOwogCiBtZWRpYV9xdWVyeV9leHBfbGlz
dDoKICAgICBtZWRpYV9xdWVyeV9leHAgewotICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRmxv
YXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgpOwotICAgICAgICAkJC0+YXBwZW5kKHBhcnNlci0+c2lu
a0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCgkMSkpOworICAgICAgICAkJCA9IG5ldyBWZWN0b3I8T3du
UHRyPE1lZGlhUXVlcnlFeHA+PjsKKyAgICAgICAgJCQtPmFwcGVuZChhZG9wdFB0cigkMSkpOwog
ICAgIH0KICAgICB8IG1lZGlhX3F1ZXJ5X2V4cF9saXN0IG1heWJlX3NwYWNlIE1FRElBX0FORCBt
YXliZV9zcGFjZSBtZWRpYV9xdWVyeV9leHAgewogICAgICAgICAkJCA9ICQxOwotICAgICAgICAk
JC0+YXBwZW5kKHBhcnNlci0+c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCgkNSkpOworICAgICAg
ICAkJC0+YXBwZW5kKGFkb3B0UHRyKCQ1KSk7CiAgICAgfQogICAgIDsKIAogbWF5YmVfYW5kX21l
ZGlhX3F1ZXJ5X2V4cF9saXN0OgogICAgIC8qZW1wdHkqLyB7Ci0gICAgICAgICQkID0gcGFyc2Vy
LT5jcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KCk7CisgICAgICAgICQkID0gbmV3IFZl
Y3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4+OwogICAgIH0KICAgICB8IE1FRElBX0FORCBtYXli
ZV9zcGFjZSBtZWRpYV9xdWVyeV9leHBfbGlzdCB7CiAgICAgICAgICQkID0gJDM7CkBAIC02NzEs
MzcgKzU3MSwzNSBAQCBtYXliZV9tZWRpYV9yZXN0cmljdG9yOgogCiBtZWRpYV9xdWVyeToKICAg
ICBtZWRpYV9xdWVyeV9leHBfbGlzdCB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVGbG9h
dGluZ01lZGlhUXVlcnkocGFyc2VyLT5zaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgkMSkp
OworICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsICJhbGwiLCBh
ZG9wdFB0cigkMSkpOwogICAgIH0KICAgICB8Ci0gICAgbWF5YmVfbWVkaWFfcmVzdHJpY3RvciBt
YXliZV9zcGFjZSBtZWRpdW0gbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cF9saXN0IHsKKyAgICBt
YXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1heWJl
X2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdCB7CiAgICAgICAgICQzLmxvd2VyKCk7Ci0gICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ01lZGlhUXVlcnkoJDEsICQzLCBwYXJzZXItPnNp
bmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KCQ0KSk7CisgICAgICAgICQkID0gbmV3IE1lZGlh
UXVlcnkoJDEsICQzLCBhZG9wdFB0cigkNSkpOwogICAgIH0KICAgICA7CiAKLW1heWJlX21lZGlh
X2xpc3Q6Ci0gICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZU1l
ZGlhUXVlcnlTZXQoKTsKLSAgICAgfQotICAgICB8IG1lZGlhX2xpc3QKLSAgICAgOworbWF5YmVf
bWVkaWFfbGlzdDogLyogZW1wdHkgKi8geyAkJCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpLmxl
YWtSZWYoKTsgfSB8IG1lZGlhX2xpc3QgOwogCiBtZWRpYV9saXN0OgogICAgIG1lZGlhX3F1ZXJ5
IHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZU1lZGlhUXVlcnlTZXQoKTsKLSAgICAgICAg
JCQtPmFkZE1lZGlhUXVlcnkocGFyc2VyLT5zaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5KCQxKSk7Cisg
ICAgICAgICQkID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCkubGVha1JlZigpOworICAgICAgICAk
JC0+YWRkTWVkaWFRdWVyeShhZG9wdFB0cigkMSkpOwogICAgICAgICBwYXJzZXItPnVwZGF0ZUxh
c3RNZWRpYUxpbmUoJCQpOwogICAgIH0KICAgICB8IG1lZGlhX2xpc3QgJywnIG1heWJlX3NwYWNl
IG1lZGlhX3F1ZXJ5IHsKICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgT3duUHRyPE1lZGlhUXVl
cnk+IG1lZGlhUXVlcnkgPSBhZG9wdFB0cigkNCk7CiAgICAgICAgIGlmICgkJCkgewotICAgICAg
ICAgICAgJCQtPmFkZE1lZGlhUXVlcnkocGFyc2VyLT5zaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5KCQ0
KSk7CisgICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVyeShtZWRpYVF1ZXJ5LnJlbGVhc2UoKSk7
CiAgICAgICAgICAgICBwYXJzZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoJCQpOwogICAgICAgICB9
CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCBlcnJvciB7CiAgICAgICAgICQkID0gMDsKKyAgICAg
ICAgaWYgKCQxKQorICAgICAgICAgICAgJDEtPmRlcmVmKCk7CiAgICAgfQogICAgIDsKIApAQCAt
NzI1LDEwICs2MjMsMTAgQEAgYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlOgogCiBtZWRp
YToKICAgICBiZWZvcmVfbWVkaWFfcnVsZSBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlz
dCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBi
bG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVN
ZWRpYVJ1bGUoJDQsICQ5KTsKKyAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZU1lZGlhUnVsZShh
ZG9wdFJlZigkNCksIGFkb3B0UHRyKCQ5KS5nZXQoKSkubGVha1JlZigpOwogICAgIH0KICAgICB8
IGJlZm9yZV9tZWRpYV9ydWxlIE1FRElBX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3Bh
Y2UgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2
ZV9ibG9jayB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVFbXB0eU1lZGlhUnVsZSgkNyk7
CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVFbXB0eU1lZGlhUnVsZShhZG9wdFB0cigkNyku
Z2V0KCkpLmxlYWtSZWYoKTsKICAgICB9CiAgICAgfCBiZWZvcmVfbWVkaWFfcnVsZSBNRURJQV9T
WU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7CiAgICAgICAgICQkID0gMDsK
QEAgLTczNiwxNiArNjM0LDExIEBAIG1lZGlhOgogICAgIH0KICAgICA7CiAKLW1lZGl1bToKLSAg
SURFTlQgbWF5YmVfc3BhY2UgewotICAgICAgJCQgPSAkMTsKLSAgfQotICA7Ci0KICNpZiBFTkFC
TEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUworCiBzdXBwb3J0czoKICAgICBiZWZvcmVfc3VwcG9y
dHNfcnVsZSBTVVBQT1JUU19TWU0gbWF5YmVfc3BhY2Ugc3VwcG9ydHNfY29uZGl0aW9uIGF0X3N1
cHBvcnRzX3J1bGVfaGVhZGVyX2VuZCAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNl
IGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0
ZVN1cHBvcnRzUnVsZSgkNCwgJDkpOworICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlU3VwcG9y
dHNSdWxlKCQ0LCBhZG9wdFB0cigkOSkuZ2V0KCkpLmxlYWtSZWYoKTsKICAgICB9CiAgICAgfCBi
ZWZvcmVfc3VwcG9ydHNfcnVsZSBTVVBQT1JUU19TWU0gc3VwcG9ydHNfZXJyb3IgewogICAgICAg
ICAkJCA9IDA7CkBAIC03NTQsOSArNjQ3LDcgQEAgc3VwcG9ydHM6CiAgICAgfQogICAgIDsKIAot
c3VwcG9ydHNfZXJyb3I6Ci0gICAgZXJyb3IgJzsnCi0gICAgfCBlcnJvciBpbnZhbGlkX2Jsb2Nr
CitzdXBwb3J0c19lcnJvcjogZXJyb3IgJzsnIHwgZXJyb3IgaW52YWxpZF9ibG9jayA7CiAKIGJl
Zm9yZV9zdXBwb3J0c19ydWxlOgogICAgIC8qIGVtcHR5ICovIHsKQEAgLTc3Miw1MyArNjYzLDM1
IEBAIGF0X3N1cHBvcnRzX3J1bGVfaGVhZGVyX2VuZDoKICAgICB9CiAgICAgOwogCi1zdXBwb3J0
c19jb25kaXRpb246Ci0gICAgc3VwcG9ydHNfY29uZGl0aW9uX2luX3BhcmVucwotICAgIHwgc3Vw
cG9ydHNfbmVnYXRpb24KLSAgICB8IHN1cHBvcnRzX2Nvbmp1bmN0aW9uCi0gICAgfCBzdXBwb3J0
c19kaXNqdW5jdGlvbgotICAgIDsKK3N1cHBvcnRzX2NvbmRpdGlvbjogc3VwcG9ydHNfY29uZGl0
aW9uX2luX3BhcmVucyB8IHN1cHBvcnRzX25lZ2F0aW9uIHwgc3VwcG9ydHNfY29uanVuY3Rpb24g
fCBzdXBwb3J0c19kaXNqdW5jdGlvbiA7CiAKLXN1cHBvcnRzX25lZ2F0aW9uOgotICAgIFNVUFBP
UlRTX05PVCBtYXliZV9zcGFjZSBzdXBwb3J0c19jb25kaXRpb25faW5fcGFyZW5zIHsKLSAgICAg
ICAgJCQgPSAhJDM7Ci0gICAgfQotICAgIDsKK3N1cHBvcnRzX25lZ2F0aW9uOiBTVVBQT1JUU19O
T1QgbWF5YmVfc3BhY2Ugc3VwcG9ydHNfY29uZGl0aW9uX2luX3BhcmVucyB7ICQkID0gISQzOyB9
IDsKIAogc3VwcG9ydHNfY29uanVuY3Rpb246Ci0gICAgc3VwcG9ydHNfY29uZGl0aW9uX2luX3Bh
cmVucyBTVVBQT1JUU19BTkQgbWF5YmVfc3BhY2Ugc3VwcG9ydHNfY29uZGl0aW9uX2luX3BhcmVu
cyB7Ci0gICAgICAgICQkID0gJDEgJiYgJDQ7Ci0gICAgfQotICAgIHwgc3VwcG9ydHNfY29uanVu
Y3Rpb24gU1VQUE9SVFNfQU5EIG1heWJlX3NwYWNlIHN1cHBvcnRzX2NvbmRpdGlvbl9pbl9wYXJl
bnMgewotICAgICAgICAkJCA9ICQxICYmICQ0OwotICAgIH0KKyAgICBzdXBwb3J0c19jb25kaXRp
b25faW5fcGFyZW5zIFNVUFBPUlRTX0FORCBtYXliZV9zcGFjZSBzdXBwb3J0c19jb25kaXRpb25f
aW5fcGFyZW5zIHsgJCQgPSAkMSAmJiAkNDsgfQorICAgIHwgc3VwcG9ydHNfY29uanVuY3Rpb24g
U1VQUE9SVFNfQU5EIG1heWJlX3NwYWNlIHN1cHBvcnRzX2NvbmRpdGlvbl9pbl9wYXJlbnMgeyAk
JCA9ICQxICYmICQ0OyB9CiAgICAgOwogCiBzdXBwb3J0c19kaXNqdW5jdGlvbjoKLSAgICBzdXBw
b3J0c19jb25kaXRpb25faW5fcGFyZW5zIFNVUFBPUlRTX09SIG1heWJlX3NwYWNlIHN1cHBvcnRz
X2NvbmRpdGlvbl9pbl9wYXJlbnMgewotICAgICAgICAkJCA9ICQxIHx8ICQ0OwotICAgIH0KLSAg
ICB8IHN1cHBvcnRzX2Rpc2p1bmN0aW9uIFNVUFBPUlRTX09SIG1heWJlX3NwYWNlIHN1cHBvcnRz
X2NvbmRpdGlvbl9pbl9wYXJlbnMgewotICAgICAgICAkJCA9ICQxIHx8ICQ0OwotICAgIH0KKyAg
ICBzdXBwb3J0c19jb25kaXRpb25faW5fcGFyZW5zIFNVUFBPUlRTX09SIG1heWJlX3NwYWNlIHN1
cHBvcnRzX2NvbmRpdGlvbl9pbl9wYXJlbnMgeyAkJCA9ICQxIHx8ICQ0OyB9CisgICAgfCBzdXBw
b3J0c19kaXNqdW5jdGlvbiBTVVBQT1JUU19PUiBtYXliZV9zcGFjZSBzdXBwb3J0c19jb25kaXRp
b25faW5fcGFyZW5zIHsgJCQgPSAkMSB8fCAkNDsgfQogICAgIDsKIAogc3VwcG9ydHNfY29uZGl0
aW9uX2luX3BhcmVuczoKLSAgICAnKCcgbWF5YmVfc3BhY2Ugc3VwcG9ydHNfY29uZGl0aW9uICcp
JyBtYXliZV9zcGFjZSB7Ci0gICAgICAgICQkID0gJDM7Ci0gICAgfQorICAgICcoJyBtYXliZV9z
cGFjZSBzdXBwb3J0c19jb25kaXRpb24gJyknIG1heWJlX3NwYWNlIHsgJCQgPSAkMzsgfQogICAg
IHwgc3VwcG9ydHNfZGVjbGFyYXRpb25fY29uZGl0aW9uCiAgICAgfCAnKCcgZXJyb3IgJyknCiAg
ICAgOwogCiBzdXBwb3J0c19kZWNsYXJhdGlvbl9jb25kaXRpb246Ci0gICAgJygnIG1heWJlX3Nw
YWNlIHByb3BlcnR5ICc6JyBtYXliZV9zcGFjZSBleHByIHByaW8gJyknIG1heWJlX3NwYWNlIHsK
KyAgICAnKCcgbWF5YmVfc3BhY2UgcHJvcGVydHkgJzonIG1heWJlX3NwYWNlIGV4cHIgcHJpb3Jp
dHkgJyknIG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSBmYWxzZTsKICAgICAgICAgQ1NTUGFy
c2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKCQz
ICYmICQ2KSB7Ci0gICAgICAgICAgICBwLT5tX3ZhbHVlTGlzdCA9IHAtPnNpbmtGbG9hdGluZ1Zh
bHVlTGlzdCgkNik7CisgICAgICAgIE93blB0cjxDU1NQYXJzZXJFeHByZXNzaW9uPiBwcm9wZXJ0
eVZhbHVlID0gYWRvcHRQdHIoJDYpOworICAgICAgICBpZiAoJDMgJiYgcHJvcGVydHlWYWx1ZSkg
eworICAgICAgICAgICAgcC0+bV92YWx1ZUxpc3QgPSBwcm9wZXJ0eVZhbHVlLnJlbGVhc2UoKTsK
ICAgICAgICAgICAgIGludCBvbGRQYXJzZWRQcm9wZXJ0aWVzID0gcC0+bV9wYXJzZWRQcm9wZXJ0
aWVzLnNpemUoKTsKLSAgICAgICAgICAgICQkID0gcC0+cGFyc2VWYWx1ZShzdGF0aWNfY2FzdDxD
U1NQcm9wZXJ0eUlEPigkMyksICQ3KTsKKyAgICAgICAgICAgICQkID0gcC0+cGFyc2VWYWx1ZSgk
MywgJDcpOwogICAgICAgICAgICAgLy8gV2UganVzdCBuZWVkIHRvIGtub3cgaWYgdGhlIGRlY2xh
cmF0aW9uIGlzIHN1cHBvcnRlZCBhcyBpdCBpcyB3cml0dGVuLiBSb2xsYmFjayBhbnkgYWRkaXRp
b25zLgogICAgICAgICAgICAgaWYgKCQkKQogICAgICAgICAgICAgICAgIHAtPnJvbGxiYWNrTGFz
dFByb3BlcnRpZXMocC0+bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG9sZFBhcnNlZFByb3Bl
cnRpZXMpOwpAQCAtODI3LDYgKzcwMCw3IEBAIHN1cHBvcnRzX2RlY2xhcmF0aW9uX2NvbmRpdGlv
bjoKICAgICAgICAgcC0+bWFya1Byb3BlcnR5RW5kKCQ3LCBmYWxzZSk7CiAgICAgfQogICAgIDsK
KwogI2VuZGlmCiAKIGJlZm9yZV9rZXlmcmFtZXNfcnVsZToKQEAgLTgzNywzOSArNzExLDMzIEBA
IGJlZm9yZV9rZXlmcmFtZXNfcnVsZToKIAoga2V5ZnJhbWVzOgogICAgIGJlZm9yZV9rZXlmcmFt
ZXNfcnVsZSBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIGF0
X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJl
X3NwYWNlIGtleWZyYW1lc19ydWxlIGNsb3NpbmdfYnJhY2UgewotICAgICAgICAkJCA9IHBhcnNl
ci0+Y3JlYXRlS2V5ZnJhbWVzUnVsZSgkNCwgcGFyc2VyLT5zaW5rRmxvYXRpbmdLZXlmcmFtZVZl
Y3RvcigkOSkpOworICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlS2V5ZnJhbWVzUnVsZSgkNCwg
YWRvcHRQdHIoJDkpKS5sZWFrUmVmKCk7CiAgICAgfQogICAgIDsKICAgCi1rZXlmcmFtZV9uYW1l
OgotICAgIElERU5UCi0gICAgfCBTVFJJTkcKLSAgICA7CitrZXlmcmFtZV9uYW1lOiBJREVOVCB8
IFNUUklORyA7CiAKIGtleWZyYW1lc19ydWxlOgotICAgIC8qIGVtcHR5ICovIHsgJCQgPSBwYXJz
ZXItPmNyZWF0ZUZsb2F0aW5nS2V5ZnJhbWVWZWN0b3IoKTsgfQorICAgIC8qIGVtcHR5ICovIHsg
JCQgPSBuZXcgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj47IH0KICAgICB8IGtleWZyYW1l
c19ydWxlIGtleWZyYW1lX3J1bGUgbWF5YmVfc3BhY2UgewogICAgICAgICAkJCA9ICQxOwotICAg
ICAgICBpZiAoJDIpCi0gICAgICAgICAgICAkJC0+YXBwZW5kKCQyKTsKKyAgICAgICAgaWYgKFJl
ZlB0cjxTdHlsZUtleWZyYW1lPiBrZXlmcmFtZSA9IGFkb3B0UmVmKCQyKSkKKyAgICAgICAgICAg
ICQkLT5hcHBlbmQoa2V5ZnJhbWUucmVsZWFzZSgpKTsKICAgICB9CiAgICAgOwogCi1rZXlmcmFt
ZV9ydWxlOgotICAgIGtleV9saXN0IG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBkZWNsYXJh
dGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgewotICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlS2V5
ZnJhbWUoJDEpOwotICAgIH0KLSAgICA7CitrZXlmcmFtZV9ydWxlOiBrZXlfbGlzdCBtYXliZV9z
cGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsgJCQg
PSBwYXJzZXItPmNyZWF0ZUtleWZyYW1lKCphZG9wdFB0cigkMSkpLmxlYWtSZWYoKTsgfSA7CiAK
IGtleV9saXN0OgogICAgIGtleSB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGlu
Z1ZhbHVlTGlzdCgpOwotICAgICAgICAkJC0+YWRkVmFsdWUocGFyc2VyLT5zaW5rRmxvYXRpbmdW
YWx1ZSgkMSkpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CisgICAgICAg
ICQkLT5hZGRWYWx1ZSgkMSk7CiAgICAgfQogICAgIHwga2V5X2xpc3QgbWF5YmVfc3BhY2UgJywn
IG1heWJlX3NwYWNlIGtleSB7CiAgICAgICAgICQkID0gJDE7CisgICAgICAgIEFTU0VSVCgkNS51
bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbik7IC8vIE5vIG5lZWQgdG8gY2FsbCBkZXN0
cm95LgogICAgICAgICBpZiAoJCQpCi0gICAgICAgICAgICAkJC0+YWRkVmFsdWUocGFyc2VyLT5z
aW5rRmxvYXRpbmdWYWx1ZSgkNSkpOworICAgICAgICAgICAgJCQtPmFkZFZhbHVlKCQ1KTsKICAg
ICB9CiAgICAgOwogCkBAIC05MDIsNyArNzcwLDcgQEAgcGFnZToKICAgICBiZWZvcmVfcGFnZV9y
dWxlIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2VsZWN0b3IgYXRfcnVsZV9oZWFkZXJfZW5k
X21heWJlX3NwYWNlCiAgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZv
cmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIGNsb3NpbmdfYnJhY2Ugewog
ICAgICAgICBpZiAoJDQpCi0gICAgICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlUGFnZVJ1bGUo
cGFyc2VyLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOworICAgICAgICAgICAgJCQgPSBwYXJz
ZXItPmNyZWF0ZVBhZ2VSdWxlKGFkb3B0UHRyKCQ0KSkubGVha1JlZigpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIC8vIENsZWFyIHByb3BlcnRpZXMgaW4gdGhlIGludmFsaWQgQHBhZ2Ug
cnVsZS4KICAgICAgICAgICAgIHBhcnNlci0+Y2xlYXJQcm9wZXJ0aWVzKCk7CkBAIC05MTIsMTgg
Kzc4MCwxOCBAQCBwYWdlOgogICAgICAgICB9CiAgICAgfQogICAgIHwgYmVmb3JlX3BhZ2VfcnVs
ZSBQQUdFX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKLSAgICAgIHBhcnNlci0+cG9wUnVsZURh
dGEoKTsKLSAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAg
ICAgICAkJCA9IDA7CiAgICAgfQogICAgIHwgYmVmb3JlX3BhZ2VfcnVsZSBQQUdFX1NZTSBlcnJv
ciAnOycgewotICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOwotICAgICAgJCQgPSAwOworICAg
ICAgICBwYXJzZXItPnBvcFJ1bGVEYXRhKCk7CisgICAgICAgICQkID0gMDsKICAgICB9CiAgICAg
OwogCiBwYWdlX3NlbGVjdG9yOgogICAgIElERU5UIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNy
ZWF0ZUZsb2F0aW5nU2VsZWN0b3JXaXRoVGFnTmFtZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAk
MSwgcGFyc2VyLT5tX2RlZmF1bHROYW1lc3BhY2UpKTsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFy
c2VyU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgJDEsIHBhcnNlci0+bV9kZWZhdWx0
TmFtZXNwYWNlKSk7CiAgICAgICAgICQkLT5zZXRGb3JQYWdlKCk7CiAgICAgfQogICAgIHwgSURF
TlQgcHNldWRvX3BhZ2UgewpAQCAtOTM5LDI1ICs4MDcsMjIgQEAgcGFnZV9zZWxlY3RvcjoKICAg
ICAgICAgICAgICQkLT5zZXRGb3JQYWdlKCk7CiAgICAgfQogICAgIHwgLyogZW1wdHkgKi8gewot
ICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAk
JCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldEZvclBhZ2UoKTsKICAg
ICB9CiAgICAgOwogCi1kZWNsYXJhdGlvbnNfYW5kX21hcmdpbnM6Ci0gICAgZGVjbGFyYXRpb25f
bGlzdAotICAgIHwgZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIG1hcmdpbl9ib3ggbWF5YmVfc3Bh
Y2UgZGVjbGFyYXRpb25fbGlzdAotICAgIDsKK2RlY2xhcmF0aW9uc19hbmRfbWFyZ2luczogZGVj
bGFyYXRpb25fbGlzdCB8IGRlY2xhcmF0aW9uc19hbmRfbWFyZ2lucyBtYXJnaW5fYm94IG1heWJl
X3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgOwogCiBtYXJnaW5fYm94OgogICAgIG1hcmdpbl9zeW0g
ewogICAgICAgICBwYXJzZXItPnN0YXJ0RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAgICAg
fSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2Jy
YWNlIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZU1hcmdpbkF0UnVsZSgkMSk7CisgICAg
ICAgIHBhcnNlci0+Y3JlYXRlTWFyZ2luQXRSdWxlKCQxKTsKICAgICB9CiAgICAgOwogCi1tYXJn
aW5fc3ltIDoKK21hcmdpbl9zeW06CiAgICAgVE9QTEVGVENPUk5FUl9TWU0gewogICAgICAgICAk
JCA9IENTU1NlbGVjdG9yOjpUb3BMZWZ0Q29ybmVyTWFyZ2luQm94OwogICAgIH0KQEAgLTEwMTUs
MjEgKzg4MCwyMSBAQCBiZWZvcmVfZm9udF9mYWNlX3J1bGU6CiAgICAgOwogCiBmb250X2ZhY2U6
Ci0gICAgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRfRkFDRV9TWU0gYXRfcnVsZV9oZWFkZXJf
ZW5kX21heWJlX3NwYWNlCi0gICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9i
ZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKLSAgICAg
ICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZvbnRGYWNlUnVsZSgpOworICAgIGJlZm9yZV9mb250X2Zh
Y2VfcnVsZSBGT05UX0ZBQ0VfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAneycg
YXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJh
dGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgeworICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRm9u
dEZhY2VSdWxlKCkubGVha1JlZigpOwogICAgIH0KICAgICB8IGJlZm9yZV9mb250X2ZhY2VfcnVs
ZSBGT05UX0ZBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewotICAgICAgJCQgPSAwOwotICAg
ICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgICAgICAkJCA9IDA7CisgICAgICAgIHBhcnNl
ci0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgICAgfCBiZWZvcmVfZm9udF9mYWNlX3J1bGUgRk9O
VF9GQUNFX1NZTSBlcnJvciAnOycgewotICAgICAgJCQgPSAwOwotICAgICAgcGFyc2VyLT5wb3BS
dWxlRGF0YSgpOworICAgICAgICAkJCA9IDA7CisgICAgICAgIHBhcnNlci0+cG9wUnVsZURhdGEo
KTsKICAgICB9CiA7CiAKICNpZiBFTkFCTEVfU0hBRE9XX0RPTQorCiBiZWZvcmVfaG9zdF9ydWxl
OgogICAgIC8qIGVtcHR5ICovIHsKICAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhlYWRlclN0YXJ0
KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOwpAQCAtMTAzNywxOCArOTAyLDE5IEBAIGJl
Zm9yZV9ob3N0X3J1bGU6CiAgICAgOwogCiBob3N0OgotICAgIGJlZm9yZV9ob3N0X3J1bGUgSE9T
VF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlCi0gICAgJ3snIGF0X3J1bGVfYm9k
eV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7Ci0gICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0UnVsZSgkNyk7CisgICAgYmVmb3JlX2hvc3RfcnVsZSBI
T1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJ3snIGF0X3J1bGVfYm9keV9z
dGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7CisgICAgICAgICQk
ID0gcGFyc2VyLT5jcmVhdGVIb3N0UnVsZShhZG9wdFB0cigkNykuZ2V0KCkpLmxlYWtSZWYoKTsK
ICAgICB9CiAgICAgfCBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1bGVfaGVhZGVyX2Vu
ZF9tYXliZV9zcGFjZSAnOycgewogICAgICAgICAkJCA9IDA7CiAgICAgICAgIHBhcnNlci0+cG9w
UnVsZURhdGEoKTsKICAgICB9CiAgICAgOworCiAjZW5kaWYKIAogI2lmIEVOQUJMRV9DU1NfREVW
SUNFX0FEQVBUQVRJT04KKwogYmVmb3JlX3ZpZXdwb3J0X3J1bGU6CiAgICAgLyogZW1wdHkgKi8g
ewogICAgICAgICBwYXJzZXItPm1hcmtWaWV3cG9ydFJ1bGVCb2R5U3RhcnQoKTsKQEAgLTEwNTks
NyArOTI1LDcgQEAgYmVmb3JlX3ZpZXdwb3J0X3J1bGU6CiB2aWV3cG9ydDoKICAgICBiZWZvcmVf
dmlld3BvcnRfcnVsZSBXRUJLSVRfVklFV1BPUlRfUlVMRV9TWU0gYXRfcnVsZV9oZWFkZXJfZW5k
X21heWJlX3NwYWNlCiAgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZv
cmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKLSAgICAgICAg
JCQgPSBwYXJzZXItPmNyZWF0ZVZpZXdwb3J0UnVsZSgpOworICAgICAgICAkJCA9IHBhcnNlci0+
Y3JlYXRlVmlld3BvcnRSdWxlKCkubGVha1JlZigpOwogICAgICAgICBwYXJzZXItPm1hcmtWaWV3
cG9ydFJ1bGVCb2R5RW5kKCk7CiAgICAgfQogICAgIHwgYmVmb3JlX3ZpZXdwb3J0X3J1bGUgV0VC
S0lUX1ZJRVdQT1JUX1JVTEVfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewpAQCAtMTA3MywxOCAr
OTM5LDggQEAgdmlld3BvcnQ6CiAgICAgICAgIHBhcnNlci0+bWFya1ZpZXdwb3J0UnVsZUJvZHlF
bmQoKTsKICAgICB9CiA7Ci0jZW5kaWYKIAotcmVnaW9uX3NlbGVjdG9yOgotICAgIHNlbGVjdG9y
X2xpc3QgewotICAgICAgICBpZiAoJDEpIHsKLSAgICAgICAgICAgIHBhcnNlci0+c2V0UmV1c2Fi
bGVSZWdpb25TZWxlY3RvclZlY3RvcigkMSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlci0+cmV1
c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICQkID0gMDsKLSAgICB9Ci07CisjZW5kaWYKIAogYmVmb3JlX3JlZ2lvbl9ydWxl
OgogICAgIC8qIGVtcHR5ICovIHsKQEAgLTEwOTMsOSArOTQ5LDEwIEBAIGJlZm9yZV9yZWdpb25f
cnVsZToKICAgICA7CiAKIHJlZ2lvbjoKLSAgICBiZWZvcmVfcmVnaW9uX3J1bGUgV0VCS0lUX1JF
R0lPTl9SVUxFX1NZTSBXSElURVNQQUNFIHJlZ2lvbl9zZWxlY3RvciBhdF9ydWxlX2hlYWRlcl9l
bmQgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSByZWdpb25fYmxvY2tfcnVsZV9s
aXN0IHNhdmVfYmxvY2sgeworICAgIGJlZm9yZV9yZWdpb25fcnVsZSBXRUJLSVRfUkVHSU9OX1JV
TEVfU1lNIFdISVRFU1BBQ0Ugc2VsZWN0b3JfbGlzdCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIGF0
X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja192YWxpZF9ydWxlX2xpc3Qgc2F2ZV9i
bG9jayB7CisgICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+Pj4gcnVs
ZUxpc3QgPSBhZG9wdFB0cigkOSk7CiAgICAgICAgIGlmICgkNCkKLSAgICAgICAgICAgICQkID0g
cGFyc2VyLT5jcmVhdGVSZWdpb25SdWxlKCQ0LCAkOSk7CisgICAgICAgICAgICAkJCA9IHBhcnNl
ci0+Y3JlYXRlUmVnaW9uUnVsZSgkNCwgcnVsZUxpc3QuZ2V0KCkpLmxlYWtSZWYoKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAkJCA9IDA7CiAgICAgICAgICAgICBwYXJzZXItPnBvcFJ1
bGVEYXRhKCk7CkBAIC0xMTA0LDYgKzk2MSw3IEBAIHJlZ2lvbjoKIDsKIAogI2lmIEVOQUJMRV9D
U1NfU0hBREVSUworCiBiZWZvcmVfZmlsdGVyX3J1bGU6CiAgICAgLyogZW1wdHkgKi8gewogICAg
ICAgICBwYXJzZXItPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OkZJTFRF
Ul9SVUxFKTsKQEAgLTExMTIsMTIgKzk3MCwxMiBAQCBiZWZvcmVfZmlsdGVyX3J1bGU6CiAgICAg
OwogCiBmaWx0ZXI6Ci0gICAgYmVmb3JlX2ZpbHRlcl9ydWxlIFdFQktJVF9GSUxURVJfUlVMRV9T
WU0gV0hJVEVTUEFDRSBJREVOVCBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UKLSAgICAn
eycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNs
YXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgeworICAgIGJlZm9yZV9maWx0ZXJfcnVsZSBXRUJL
SVRfRklMVEVSX1JVTEVfU1lNIFdISVRFU1BBQ0UgSURFTlQgYXRfcnVsZV9oZWFkZXJfZW5kX21h
eWJlX3NwYWNlICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xh
cmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7CiAgICAgICAgIHBhcnNlci0+
bV9pbkZpbHRlclJ1bGUgPSBmYWxzZTsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZpbHRl
clJ1bGUoJDQpOworICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRmlsdGVyUnVsZSgkNCkubGVh
a1JlZigpOwogICAgIH0KICAgICA7CisKICNlbmRpZgogCiBjb21iaW5hdG9yOgpAQCAtMTEyNiwy
MDQgKzk4NCwxODIgQEAgY29tYmluYXRvcjoKICAgfCAnPicgbWF5YmVfc3BhY2UgeyAkJCA9IENT
U1NlbGVjdG9yOjpDaGlsZDsgfQogICA7CiAKLW1heWJlX3VuYXJ5X29wZXJhdG9yOgotICAgIHVu
YXJ5X29wZXJhdG9yIHsgJCQgPSAkMTsgfQotICAgIHwgeyAkJCA9IDE7IH0KLSAgICA7CittYXli
ZV91bmFyeV9vcGVyYXRvcjogdW5hcnlfb3BlcmF0b3IgfCB7ICQkID0gMTsgfSA7CiAKLXVuYXJ5
X29wZXJhdG9yOgotICAgICctJyB7ICQkID0gLTE7IH0KLSAgfCAnKycgeyAkJCA9IDE7IH0KLSAg
OwordW5hcnlfb3BlcmF0b3I6ICctJyB7ICQkID0gLTE7IH0gfCAnKycgeyAkJCA9IDE7IH0gOwog
Ci1tYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb246Ci0gICAgbWF5YmVfc3BhY2UgewotICAg
ICAgICBwYXJzZXItPm1hcmtQcm9wZXJ0eVN0YXJ0KCk7Ci0gICAgfQotICA7CittYXliZV9zcGFj
ZV9iZWZvcmVfZGVjbGFyYXRpb246IG1heWJlX3NwYWNlIHsgcGFyc2VyLT5tYXJrUHJvcGVydHlT
dGFydCgpOyB9IDsKIAogYmVmb3JlX3NlbGVjdG9yX2xpc3Q6Ci0gICAgLyogZW1wdHkgKi8gewor
ICAgIHsKICAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VE
YXRhOjpTVFlMRV9SVUxFKTsKICAgICAgICAgcGFyc2VyLT5tYXJrU2VsZWN0b3JTdGFydCgpOwog
ICAgIH0KICAgOwogCi1hdF9ydWxlX2hlYWRlcl9lbmQ6Ci0gICAgLyogZW1wdHkgKi8gewotICAg
ICAgICBwYXJzZXItPm1hcmtSdWxlSGVhZGVyRW5kKCk7Ci0gICAgfQotICA7CithdF9ydWxlX2hl
YWRlcl9lbmQ6IHsgcGFyc2VyLT5tYXJrUnVsZUhlYWRlckVuZCgpOyB9IDsKIAotYXRfc2VsZWN0
b3JfZW5kOgotICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgcGFyc2VyLT5tYXJrU2VsZWN0b3JF
bmQoKTsKLSAgICB9Ci0gIDsKK2F0X3NlbGVjdG9yX2VuZDogeyBwYXJzZXItPm1hcmtTZWxlY3Rv
ckVuZCgpOyB9IDsKIAogcnVsZXNldDoKICAgICBiZWZvcmVfc2VsZWN0b3JfbGlzdCBzZWxlY3Rv
cl9saXN0IGF0X3NlbGVjdG9yX2VuZCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIGF0X3J1bGVfYm9k
eV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBj
bG9zaW5nX2JyYWNlIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZVN0eWxlUnVsZSgkMik7
CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVTdHlsZVJ1bGUoJDIpLmxlYWtSZWYoKTsKKyAg
ICAgICAgcGFyc2VyLT5yZWN5Y2xlU2VsZWN0b3JWZWN0b3IoYWRvcHRQdHIoJDIpKTsKICAgICB9
CiAgIDsKIAotYmVmb3JlX3NlbGVjdG9yX2dyb3VwX2l0ZW06Ci0gICAgLyogZW1wdHkgKi8gewot
ICAgICAgICBwYXJzZXItPm1hcmtTZWxlY3RvclN0YXJ0KCk7Ci0gICAgfQorYmVmb3JlX3NlbGVj
dG9yX2dyb3VwX2l0ZW06IHsgcGFyc2VyLT5tYXJrU2VsZWN0b3JTdGFydCgpOyB9IDsKIAogc2Vs
ZWN0b3JfbGlzdDoKICAgICBzZWxlY3RvciAlcHJlYyBVTklNUE9SVEFOVF9UT0sgeworICAgICAg
ICAkJCA9IDA7CiAgICAgICAgIGlmICgkMSkgewotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJl
dXNhYmxlU2VsZWN0b3JWZWN0b3IoKTsKLSAgICAgICAgICAgICQkLT5zaHJpbmsoMCk7Ci0gICAg
ICAgICAgICAkJC0+YXBwZW5kKHBhcnNlci0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDEpKTsKKyAg
ICAgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVTZWxlY3RvclZlY3RvcigpLmxlYWtQdHIoKTsK
KyAgICAgICAgICAgICQkLT5hcHBlbmQoYWRvcHRQdHIoJDEpKTsKICAgICAgICAgICAgIHBhcnNl
ci0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgfCBzZWxlY3Rvcl9saXN0IGF0X3NlbGVjdG9yX2VuZCAnLCcgbWF5YmVfc3BhY2UgYmVm
b3JlX3NlbGVjdG9yX2dyb3VwX2l0ZW0gc2VsZWN0b3IgJXByZWMgVU5JTVBPUlRBTlRfVE9LIHsK
LSAgICAgICAgaWYgKCQxICYmICQ2KSB7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAg
ICAgJCQtPmFwcGVuZChwYXJzZXItPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQ2KSk7CisgICAgICAg
IE93blB0cjxWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IHNlbGVjdG9yTGlzdCA9
IGFkb3B0UHRyKCQxKTsKKyAgICAgICAgT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3Rv
ciA9IGFkb3B0UHRyKCQ2KTsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBpZiAoc2VsZWN0b3JM
aXN0ICYmIHNlbGVjdG9yKSB7CisgICAgICAgICAgICAkJCA9IHNlbGVjdG9yTGlzdC5sZWFrUHRy
KCk7CisgICAgICAgICAgICAkJC0+YXBwZW5kKHNlbGVjdG9yLnJlbGVhc2UoKSk7CiAgICAgICAg
ICAgICBwYXJzZXItPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgfQogICAgIH0KLSAgfCBzZWxl
Y3Rvcl9saXN0IGVycm9yIHsKKyAgICB8IHNlbGVjdG9yX2xpc3QgZXJyb3IgewogICAgICAgICAk
JCA9IDA7CisgICAgICAgIGRlbGV0ZSAkMTsKICAgICB9CiAgICA7CiAKLXNlbGVjdG9yX3dpdGhf
dHJhaWxpbmdfd2hpdGVzcGFjZToKLSAgICBzZWxlY3RvciBXSElURVNQQUNFIHsKLSAgICAgICAg
JCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCiBzZWxlY3RvcjoKLSAgICBzaW1wbGVfc2VsZWN0b3Ig
ewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHNlbGVjdG9yX3dpdGhfdHJhaWxpbmdf
d2hpdGVzcGFjZQotICAgIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBzZWxlY3Rv
cl93aXRoX3RyYWlsaW5nX3doaXRlc3BhY2Ugc2ltcGxlX3NlbGVjdG9yCi0gICAgewotICAgICAg
ICAkJCA9ICQyOwotICAgICAgICBpZiAoISQxKQotICAgICAgICAgICAgJCQgPSAwOwotICAgICAg
ICBlbHNlIGlmICgkJCkKLSAgICAgICAgICAgICQkLT5hcHBlbmRUYWdIaXN0b3J5KENTU1NlbGVj
dG9yOjpEZXNjZW5kYW50LCBwYXJzZXItPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7CisgICAg
c2ltcGxlX3NlbGVjdG9yCisgICAgfCBzZWxlY3RvciBXSElURVNQQUNFCisgICAgfCBzZWxlY3Rv
ciBXSElURVNQQUNFIHNpbXBsZV9zZWxlY3RvciB7CisgICAgICAgIE93blB0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gbGVmdCA9IGFkb3B0UHRyKCQxKTsKKyAgICAgICAgT3duUHRyPENTU1BhcnNlclNl
bGVjdG9yPiByaWdodCA9IGFkb3B0UHRyKCQzKTsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCkgeworICAgICAgICAgICAgcmlnaHQtPmFwcGVuZFRhZ0hpc3Rvcnko
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQsIGxlZnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICQk
ID0gcmlnaHQubGVha1B0cigpOworICAgICAgICB9CiAgICAgfQogICAgIHwgc2VsZWN0b3IgY29t
YmluYXRvciBzaW1wbGVfc2VsZWN0b3IgewotICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAo
ISQxKQotICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICBlbHNlIGlmICgkJCkKLSAgICAgICAg
ICAgICQkLT5hcHBlbmRUYWdIaXN0b3J5KCQyLCBwYXJzZXItPnNpbmtGbG9hdGluZ1NlbGVjdG9y
KCQxKSk7CisgICAgICAgIE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbGVmdCA9IGFkb3B0UHRy
KCQxKTsKKyAgICAgICAgT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiByaWdodCA9IGFkb3B0UHRy
KCQzKTsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgeworICAg
ICAgICAgICAgcmlnaHQtPmFwcGVuZFRhZ0hpc3RvcnkoJDIsIGxlZnQucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgICQkID0gcmlnaHQubGVha1B0cigpOworICAgICAgICB9CiAgICAgfQogICAgIHwg
c2VsZWN0b3IgZXJyb3IgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIGRlbGV0ZSAkMTsKICAg
ICB9CiAgICAgOwogCiBuYW1lc3BhY2Vfc2VsZWN0b3I6Ci0gICAgLyogZW1wdHkgKi8gJ3wnIHsg
JCQuY2xlYXIoKTsgfQorICAgICd8JyB7ICQkLmNsZWFyKCk7IH0KICAgICB8ICcqJyAnfCcgeyBz
dGF0aWMgTENoYXIgc3RhciA9ICcqJzsgJCQuaW5pdCgmc3RhciwgMSk7IH0KLSAgICB8IElERU5U
ICd8JyB7ICQkID0gJDE7IH0KKyAgICB8IElERU5UICd8JwogOwotICAgIAorCiBzaW1wbGVfc2Vs
ZWN0b3I6CiAgICAgZWxlbWVudF9uYW1lIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZs
b2F0aW5nU2VsZWN0b3JXaXRoVGFnTmFtZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAkMSwgcGFy
c2VyLT5tX2RlZmF1bHROYW1lc3BhY2UpKTsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2Vs
ZWN0b3IoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgJDEsIHBhcnNlci0+bV9kZWZhdWx0TmFtZXNw
YWNlKSk7CiAgICAgfQogICAgIHwgZWxlbWVudF9uYW1lIHNwZWNpZmllcl9saXN0IHsKICAgICAg
ICAgJCQgPSAkMjsKICAgICAgICAgaWYgKCQkKQotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJl
d3JpdGVTcGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKG51bGxBdG9tLCAkMSwgJCQpOworICAgICAg
ICAgICAgcGFyc2VyLT5yZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZShudWxsQXRvbSwg
JDEsICokJCk7CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgewogICAgICAgICAkJCA9ICQx
OwogICAgICAgICBpZiAoJCQpCi0gICAgICAgICAgICAkJCA9IHBhcnNlci0+cmV3cml0ZVNwZWNp
ZmllcnNXaXRoTmFtZXNwYWNlSWZOZWVkZWQoJCQpOworICAgICAgICAgICAgcGFyc2VyLT5yZXdy
aXRlU3BlY2lmaWVyc1dpdGhOYW1lc3BhY2VJZk5lZWRlZCgqJCQpOwogICAgIH0KICAgICB8IG5h
bWVzcGFjZV9zZWxlY3RvciBlbGVtZW50X25hbWUgewotICAgICAgICAkJCA9IHBhcnNlci0+Y3Jl
YXRlRmxvYXRpbmdTZWxlY3RvcldpdGhUYWdOYW1lKHBhcnNlci0+ZGV0ZXJtaW5lTmFtZUluTmFt
ZXNwYWNlKCQxLCAkMikpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcihwYXJz
ZXItPmRldGVybWluZU5hbWVJbk5hbWVzcGFjZSgkMSwgJDIpKTsKICAgICB9CiAgICAgfCBuYW1l
c3BhY2Vfc2VsZWN0b3IgZWxlbWVudF9uYW1lIHNwZWNpZmllcl9saXN0IHsKICAgICAgICAgJCQg
PSAkMzsKICAgICAgICAgaWYgKCQkKQotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJld3JpdGVT
cGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKCQxLCAkMiwgJCQpOworICAgICAgICAgICAgcGFyc2Vy
LT5yZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZSgkMSwgJDIsICokJCk7CiAgICAgfQog
ICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yIHNwZWNpZmllcl9saXN0IHsKICAgICAgICAgJCQgPSAk
MjsKICAgICAgICAgaWYgKCQkKQotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJld3JpdGVTcGVj
aWZpZXJzV2l0aEVsZW1lbnROYW1lKCQxLCBzdGFyQXRvbSwgJCQpOworICAgICAgICAgICAgcGFy
c2VyLT5yZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZSgkMSwgc3RhckF0b20sICokJCk7
CiAgICAgfQogICA7CiAKIHNpbXBsZV9zZWxlY3Rvcl9saXN0OgogICAgIHNpbXBsZV9zZWxlY3Rv
ciAlcHJlYyBVTklNUE9SVEFOVF9UT0sgeworICAgICAgICAkJCA9IDA7CiAgICAgICAgIGlmICgk
MSkgewotICAgICAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JWZWN0
b3IoKTsKLSAgICAgICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zaW5rRmxvYXRpbmdTZWxlY3Rv
cigkMSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVTZWxlY3RvclZlY3RvcigpLmxlYWtQdHIoKTsKKyAgICAgICAg
ICAgICQkLT5hcHBlbmQoYWRvcHRQdHIoJDEpKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IHNp
bXBsZV9zZWxlY3Rvcl9saXN0IG1heWJlX3NwYWNlICcsJyBtYXliZV9zcGFjZSBzaW1wbGVfc2Vs
ZWN0b3IgJXByZWMgVU5JTVBPUlRBTlRfVE9LIHsKLSAgICAgICAgaWYgKCQxICYmICQ1KSB7Ci0g
ICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNpbmtG
bG9hdGluZ1NlbGVjdG9yKCQ1KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgJCQgPSAw
OworICAgICAgICBPd25QdHI8VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBsaXN0
ID0gYWRvcHRQdHIoJDEpOworICAgICAgICBPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVj
dG9yID0gYWRvcHRQdHIoJDUpOworICAgICAgICAkJCA9IDA7CisgICAgICAgIGlmIChsaXN0ICYm
IHNlbGVjdG9yKSB7CisgICAgICAgICAgICAkJCA9IGxpc3QubGVha1B0cigpOworICAgICAgICAg
ICAgJCQtPmFwcGVuZChzZWxlY3Rvci5yZWxlYXNlKCkpOworICAgICAgICB9CiAgICAgfQogICAg
IHwgc2ltcGxlX3NlbGVjdG9yX2xpc3QgZXJyb3IgewogICAgICAgICAkJCA9IDA7CisgICAgICAg
IGRlbGV0ZSAkMTsKICAgICB9Ci0gIDsKKyAgICA7CiAKIGVsZW1lbnRfbmFtZToKICAgICBJREVO
VCB7Ci0gICAgICAgIENTU1BhcnNlclN0cmluZyYgc3RyID0gJDE7CiAgICAgICAgIGlmIChwYXJz
ZXItPm1fY29udGV4dC5pc0hUTUxEb2N1bWVudCkKLSAgICAgICAgICAgIHN0ci5sb3dlcigpOwot
ICAgICAgICAkJCA9IHN0cjsKKyAgICAgICAgICAgICQxLmxvd2VyKCk7CisgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgJyonIHsKICAgICAgICAgc3RhdGljIExDaGFyIHN0YXIgPSAnKic7
CiAgICAgICAgICQkLmluaXQoJnN0YXIsIDEpOwogICAgIH0KLSAgOworICAgIDsKIAogc3BlY2lm
aWVyX2xpc3Q6Ci0gICAgc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9CisgICAg
c3BlY2lmaWVyCiAgICAgfCBzcGVjaWZpZXJfbGlzdCBzcGVjaWZpZXIgewotICAgICAgICBpZiAo
ISQyKQotICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICBlbHNlIGlmICgkMSkKLSAgICAgICAg
ICAgICQkID0gcGFyc2VyLT5yZXdyaXRlU3BlY2lmaWVycygkMSwgJDIpOworICAgICAgICBPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGxpc3QgPSBhZG9wdFB0cigkMSk7CisgICAgICAgIE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc3BlY2lmaWVyID0gYWRvcHRQdHIoJDIpOworICAgICAgICAk
JCA9IDA7CisgICAgICAgIGlmIChsaXN0ICYmIHNwZWNpZmllcikKKyAgICAgICAgICAgICQkID0g
cGFyc2VyLT5yZXdyaXRlU3BlY2lmaWVycyhsaXN0LnJlbGVhc2UoKSwgc3BlY2lmaWVyLnJlbGVh
c2UoKSkubGVha1B0cigpOwogICAgIH0KICAgICB8IHNwZWNpZmllcl9saXN0IGVycm9yIHsKICAg
ICAgICAgJCQgPSAwOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQogOwogCiBzcGVjaWZpZXI6
CiAgICAgSURTRUwgewotICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRmxvYXRpbmdTZWxlY3Rv
cigpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNl
dE1hdGNoKENTU1NlbGVjdG9yOjpJZCk7CiAgICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5t
b2RlID09IENTU1F1aXJrc01vZGUpCiAgICAgICAgICAgICAkMS5sb3dlcigpOwogICAgICAgICAk
JC0+c2V0VmFsdWUoJDEpOwogICAgIH0KICAgfCBIRVggewotICAgICAgICBpZiAoJDFbMF0gPj0g
JzAnICYmICQxWzBdIDw9ICc5JykgeworICAgICAgICBpZiAoJDFbMF0gPj0gJzAnICYmICQxWzBd
IDw9ICc5JykKICAgICAgICAgICAgICQkID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICAgICAk
JC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OklkKTsKICAgICAgICAgICAgIGlmIChwYXJzZXItPm1f
Y29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGUpCiAgICAgICAgICAgICAgICAgJDEubG93ZXIo
KTsKQEAgLTEzMzcsNyArMTE3Myw3IEBAIHNwZWNpZmllcjoKIAogY2xhc3M6CiAgICAgJy4nIElE
RU5UIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAg
ICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChD
U1NTZWxlY3Rvcjo6Q2xhc3MpOwogICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9
PSBDU1NRdWlya3NNb2RlKQogICAgICAgICAgICAgJDIubG93ZXIoKTsKQEAgLTEzNDUsMzQgKzEx
ODEsMjggQEAgY2xhc3M6CiAgICAgfQogICA7CiAKLWF0dHJfbmFtZToKLSAgICBJREVOVCBtYXli
ZV9zcGFjZSB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQogYXR0cmliOgotICAg
ICdbJyBtYXliZV9zcGFjZSBhdHRyX25hbWUgJ10nIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNy
ZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAgICAnWycgbWF5YmVfc3BhY2UgSURFTlQgbWF5YmVf
c3BhY2UgJ10nIHsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAg
ICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgJDMsIG51bGxBdG9tKSwg
cGFyc2VyLT5tX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpOwogICAgICAgICAkJC0+c2V0TWF0Y2go
Q1NTU2VsZWN0b3I6OlNldCk7CiAgICAgfQotICAgIHwgJ1snIG1heWJlX3NwYWNlIGF0dHJfbmFt
ZSBtYXRjaCBtYXliZV9zcGFjZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKLSAg
ICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAgICB8ICdbJyBt
YXliZV9zcGFjZSBJREVOVCBtYXliZV9zcGFjZSBtYXRjaCBtYXliZV9zcGFjZSBpZGVudF9vcl9z
dHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0
b3I7CiAgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgJDMs
IG51bGxBdG9tKSwgcGFyc2VyLT5tX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpOwotICAgICAgICAk
JC0+c2V0TWF0Y2goKENTU1NlbGVjdG9yOjpNYXRjaCkkNCk7Ci0gICAgICAgICQkLT5zZXRWYWx1
ZSgkNik7CisgICAgICAgICQkLT5zZXRNYXRjaCgkNSk7CisgICAgICAgICQkLT5zZXRWYWx1ZSgk
Nyk7CiAgICAgfQotICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9zZWxlY3RvciBhdHRy
X25hbWUgJ10nIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3Io
KTsKKyAgICB8ICdbJyBtYXliZV9zcGFjZSBuYW1lc3BhY2Vfc2VsZWN0b3IgSURFTlQgbWF5YmVf
c3BhY2UgJ10nIHsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAg
ICQkLT5zZXRBdHRyaWJ1dGUocGFyc2VyLT5kZXRlcm1pbmVOYW1lSW5OYW1lc3BhY2UoJDMsICQ0
KSwgcGFyc2VyLT5tX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpOwogICAgICAgICAkJC0+c2V0TWF0
Y2goQ1NTU2VsZWN0b3I6OlNldCk7CiAgICAgfQotICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVz
cGFjZV9zZWxlY3RvciBhdHRyX25hbWUgbWF0Y2ggbWF5YmVfc3BhY2UgaWRlbnRfb3Jfc3RyaW5n
IG1heWJlX3NwYWNlICddJyB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1Nl
bGVjdG9yKCk7CisgICAgfCAnWycgbWF5YmVfc3BhY2UgbmFtZXNwYWNlX3NlbGVjdG9yIElERU5U
IG1heWJlX3NwYWNlIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBtYXliZV9zcGFj
ZSAnXScgeworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQt
PnNldEF0dHJpYnV0ZShwYXJzZXItPmRldGVybWluZU5hbWVJbk5hbWVzcGFjZSgkMywgJDQpLCBw
YXJzZXItPm1fY29udGV4dC5pc0hUTUxEb2N1bWVudCk7Ci0gICAgICAgICQkLT5zZXRNYXRjaCgo
Q1NTU2VsZWN0b3I6Ok1hdGNoKSQ1KTsKLSAgICAgICAgJCQtPnNldFZhbHVlKCQ3KTsKKyAgICAg
ICAgJCQtPnNldE1hdGNoKCQ2KTsKKyAgICAgICAgJCQtPnNldFZhbHVlKCQ4KTsKICAgICB9CiAg
IDsKIApAQCAtMTM5NywxNCArMTIyNywxMSBAQCBtYXRjaDoKICAgICB9CiAgICAgOwogCi1pZGVu
dF9vcl9zdHJpbmc6Ci0gICAgSURFTlQKLSAgfCBTVFJJTkcKLSAgICA7CitpZGVudF9vcl9zdHJp
bmc6IElERU5UIHwgU1RSSU5HIDsKIAogcHNldWRvX3BhZ2U6CiAgICAgJzonIElERU5UIHsKLSAg
ICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAgICAgICAgJCQg
PSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rv
cjo6UGFnZVBzZXVkb0NsYXNzKTsKICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgJCQtPnNl
dFZhbHVlKCQyKTsKQEAgLTE0MTUsNyArMTI0Miw3IEBAIHBzZXVkb19wYWdlOgogCiBwc2V1ZG86
CiAgICAgJzonIElERU5UIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2Vs
ZWN0b3IoKTsKKyAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICQk
LT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwogICAgICAgICAkMi5sb3dlcigp
OwogICAgICAgICAkJC0+c2V0VmFsdWUoJDIpOwpAQCAtMTQyNCw3ICsxMjUxLDcgQEAgcHNldWRv
OgogICAgICAgICAgICAgJCQgPSAwOwogICAgIH0KICAgICB8ICc6JyAnOicgSURFTlQgewotICAg
ICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAkJCA9
IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50KTsKICAgICAgICAgJDMubG93ZXIoKTsKICAgICAgICAgJCQtPnNldFZh
bHVlKCQzKTsKQEAgLTE0MzYsMTYgKzEyNjMsMTYgQEAgcHNldWRvOgogI2lmIEVOQUJMRV9WSURF
T19UUkFDSwogICAgIC8vIHVzZWQgYnkgOjpjdWUoOnBhc3QvOmZ1dHVyZSkKICAgICB8ICc6JyAn
OicgQ1VFRlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9yX2xpc3QgbWF5YmVfc3Bh
Y2UgJyknIHsKKyAgICAgICAgJCQgPSAwOwogICAgICAgICBpZiAoJDUpIHsKLSAgICAgICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CisgICAgICAgICAgICAkJCA9
IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpOwotICAgICAgICAgICAgJCQtPmFkb3B0U2VsZWN0b3JWZWN0b3Io
KnBhcnNlci0+c2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoJDUpKTsKKyAgICAgICAgICAgICQk
LT5hZG9wdFNlbGVjdG9yVmVjdG9yKCphZG9wdFB0cigkNSkpOwogICAgICAgICAgICAgJCQtPnNl
dFZhbHVlKCQzKTsKICAgICAgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHR5cGUgPSAk
JC0+cHNldWRvVHlwZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0N1ZSkKICAgICAgICAgICAgICAgICAkJCA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgJCQgPSAwOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgLy8gdXNlIGJ5IDot
d2Via2l0LWFueS4KQEAgLTE0NTQsMjEgKzEyODEsMjEgQEAgcHNldWRvOgogICAgIC8vIFNlZSBo
dHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxMFNlcC8wNTY2
Lmh0bWwgZm9yIHNvbWUKICAgICAvLyByZWxhdGVkIGRpc2N1c3Npb24gd2l0aCByZXNwZWN0IHRv
IDpub3QuCiAgICAgfCAnOicgQU5ZRlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9y
X2xpc3QgbWF5YmVfc3BhY2UgJyknIHsKKyAgICAgICAgJCQgPSAwOwogICAgICAgICBpZiAoJDQp
IHsKLSAgICAgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7Cisg
ICAgICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgICAgICQkLT5z
ZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwotICAgICAgICAgICAgJCQtPmFkb3B0
U2VsZWN0b3JWZWN0b3IoKnBhcnNlci0+c2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoJDQpKTsK
KyAgICAgICAgICAgICQkLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCphZG9wdFB0cigkNCkpOwogICAg
ICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgICAgICQkLT5zZXRWYWx1ZSgkMik7CiAgICAg
ICAgICAgICBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSB0eXBlID0gJCQtPnBzZXVkb1R5cGUoKTsK
ICAgICAgICAgICAgIGlmICh0eXBlICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9BbnkpCiAgICAgICAg
ICAgICAgICAgJCQgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICQkID0gMDsKKyAg
ICAgICAgfQogICAgIH0KICAgICAvLyB1c2VkIGJ5IDpudGgtKihheCtiKQogICAgIHwgJzonIEZV
TkNUSU9OIG1heWJlX3NwYWNlIE5USCBtYXliZV9zcGFjZSAnKScgewotICAgICAgICAkJCA9IHBh
cnNlci0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJz
ZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7CiAgICAgICAgICQkLT5zZXRBcmd1bWVudCgkNCk7CiAgICAgICAgICQkLT5zZXRWYWx1ZSgk
Mik7CkBAIC0xNDc4LDcgKzEzMDUsNyBAQCBwc2V1ZG86CiAgICAgfQogICAgIC8vIHVzZWQgYnkg
Om50aC0qCiAgICAgfCAnOicgRlVOQ1RJT04gbWF5YmVfc3BhY2UgbWF5YmVfdW5hcnlfb3BlcmF0
b3IgSU5URUdFUiBtYXliZV9zcGFjZSAnKScgewotICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRl
RmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsK
ICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CiAgICAgICAg
ICQkLT5zZXRBcmd1bWVudChTdHJpbmc6Om51bWJlcigkNCAqICQ1KSk7CiAgICAgICAgICQkLT5z
ZXRWYWx1ZSgkMik7CkBAIC0xNDg4LDcgKzEzMTUsNyBAQCBwc2V1ZG86CiAgICAgfQogICAgIC8v
IHVzZWQgYnkgOm50aC0qKG9kZC9ldmVuKSBhbmQgOmxhbmcKICAgICB8ICc6JyBGVU5DVElPTiBt
YXliZV9zcGFjZSBJREVOVCBtYXliZV9zcGFjZSAnKScgewotICAgICAgICAkJCA9IHBhcnNlci0+
Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxl
Y3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CiAg
ICAgICAgICQkLT5zZXRBcmd1bWVudCgkNCk7CiAgICAgICAgICQyLmxvd2VyKCk7CkBAIC0xNTA2
LDE0ICsxMzMzLDE0IEBAIHBzZXVkbzoKICAgICB9CiAgICAgLy8gdXNlZCBieSA6bm90CiAgICAg
fCAnOicgTk9URlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9yIG1heWJlX3NwYWNl
ICcpJyB7Ci0gICAgICAgIGlmICghJDQgfHwgISQ0LT5pc1NpbXBsZSgpKQotICAgICAgICAgICAg
JCQgPSAwOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVG
bG9hdGluZ1NlbGVjdG9yKCk7CisgICAgICAgIE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2Vs
ZWN0b3IgPSBhZG9wdFB0cigkNCk7CisgICAgICAgICQkID0wOworICAgICAgICBpZiAoc2VsZWN0
b3IgJiYgc2VsZWN0b3ItPmlzU2ltcGxlKCkpIHsKKyAgICAgICAgICAgICQkID0gbmV3IENTU1Bh
cnNlclNlbGVjdG9yOwogICAgICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzcyk7CiAKLSAgICAgICAgICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID4gc2VsZWN0b3JWZWN0b3I7Ci0gICAgICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBlbmQocGFy
c2VyLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOworICAgICAgICAgICAgVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4+IHNlbGVjdG9yVmVjdG9yOworICAgICAgICAgICAgc2VsZWN0
b3JWZWN0b3IuYXBwZW5kKHNlbGVjdG9yLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAkJC0+YWRv
cHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rvcik7CiAKICAgICAgICAgICAgICQyLmxvd2Vy
KCk7CkBAIC0xNTI0LDIzICsxMzUxLDExIEBAIHBzZXVkbzoKIAogZGVjbGFyYXRpb25fbGlzdDoK
ICAgICAvKiBlbXB0eSAqLyB7ICQkID0gZmFsc2U7IH0KLSAgICB8IGRlY2xhcmF0aW9uIHsKLSAg
ICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBkZWNsX2xpc3QgZGVjbGFyYXRpb24gewotICAg
ICAgICAkJCA9ICQxOwotICAgICAgICBpZiAoICQyICkKLSAgICAgICAgICAgICQkID0gJDI7Ci0g
ICAgfQotICAgIHwgZGVjbF9saXN0IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBk
ZWNsX2xpc3RfcmVjb3ZlcnkgewotICAgICAgICAkJCA9IGZhbHNlOwotICAgIH0KLSAgICB8IGRl
Y2xfbGlzdCBkZWNsX2xpc3RfcmVjb3ZlcnkgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KKyAg
ICB8IGRlY2xhcmF0aW9uCisgICAgfCBkZWNsX2xpc3QgZGVjbGFyYXRpb24geyAkJCA9ICQxIHx8
ICQyOyB9CisgICAgfCBkZWNsX2xpc3QKKyAgICB8IGRlY2xfbGlzdF9yZWNvdmVyeSB7ICQkID0g
ZmFsc2U7IH0KKyAgICB8IGRlY2xfbGlzdCBkZWNsX2xpc3RfcmVjb3ZlcnkKICAgICA7CiAKIGRl
Y2xfbGlzdDoKQEAgLTE1NzEsMjMgKzEzODYsMjQgQEAgZGVjbF9saXN0X3JlY292ZXJ5OgogICAg
IDsKIAogZGVjbGFyYXRpb246Ci0gICAgVkFSX0RFRklOSVRJT04gbWF5YmVfc3BhY2UgJzonIG1h
eWJlX3NwYWNlIGV4cHIgcHJpbyB7CisgICAgVkFSX0RFRklOSVRJT04gbWF5YmVfc3BhY2UgJzon
IG1heWJlX3NwYWNlIGV4cHIgcHJpb3JpdHkgewogI2lmIEVOQUJMRV9DU1NfVkFSSUFCTEVTCi0g
ICAgICAgIHBhcnNlci0+c3RvcmVWYXJpYWJsZURlY2xhcmF0aW9uKCQxLCBwYXJzZXItPnNpbmtG
bG9hdGluZ1ZhbHVlTGlzdCgkNSksICQ2KTsKKyAgICAgICAgcGFyc2VyLT5zdG9yZVZhcmlhYmxl
RGVjbGFyYXRpb24oJDEsIGFkb3B0UHRyKCQ1KSwgJDYpOwogICAgICAgICAkJCA9IHRydWU7CiAg
ICAgICAgIHBhcnNlci0+bWFya1Byb3BlcnR5RW5kKCQ2LCB0cnVlKTsKICNlbHNlCisgICAgICAg
IGRlbGV0ZSAkNTsKICAgICAgICAgJCQgPSBmYWxzZTsKICNlbmRpZgogICAgIH0KLSAgICB8Ci0g
ICAgcHJvcGVydHkgJzonIG1heWJlX3NwYWNlIGV4cHIgcHJpbyB7CisgICAgfCBwcm9wZXJ0eSAn
OicgbWF5YmVfc3BhY2UgZXhwciBwcmlvcml0eSB7CiAgICAgICAgICQkID0gZmFsc2U7CiAgICAg
ICAgIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCA9IGZhbHNlOwotICAgICAgICBpZiAoJDEgJiYgJDQp
IHsKLSAgICAgICAgICAgIHBhcnNlci0+bV92YWx1ZUxpc3QgPSBwYXJzZXItPnNpbmtGbG9hdGlu
Z1ZhbHVlTGlzdCgkNCk7CisgICAgICAgIE93blB0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHByb3Bl
cnR5VmFsdWUgPSBhZG9wdFB0cigkNCk7CisgICAgICAgIGlmICgkMSAmJiBwcm9wZXJ0eVZhbHVl
KSB7CisgICAgICAgICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gcHJvcGVydHlWYWx1ZS5yZWxl
YXNlKCk7CiAgICAgICAgICAgICBpbnQgb2xkUGFyc2VkUHJvcGVydGllcyA9IHBhcnNlci0+bV9w
YXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsKLSAgICAgICAgICAgICQkID0gcGFyc2VyLT5wYXJzZVZh
bHVlKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCQxKSwgJDUpOworICAgICAgICAgICAgJCQg
PSBwYXJzZXItPnBhcnNlVmFsdWUoJDEsICQ1KTsKICAgICAgICAgICAgIGlmICghJCQpCiAgICAg
ICAgICAgICAgICAgcGFyc2VyLT5yb2xsYmFja0xhc3RQcm9wZXJ0aWVzKHBhcnNlci0+bV9wYXJz
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOwogICAgICAgICAgICAg
ZWxzZQpAQCAtMTU5Niw1OSArMTQxMiw0MiBAQCBkZWNsYXJhdGlvbjoKICAgICAgICAgfQogICAg
ICAgICBwYXJzZXItPm1hcmtQcm9wZXJ0eUVuZCgkNSwgaXNQcm9wZXJ0eVBhcnNlZCk7CiAgICAg
fQotICAgIHwKLSAgICBwcm9wZXJ0eSBkZWNsYXJhdGlvbl9yZWNvdmVyeSB7Ci0gICAgICAgICQk
ID0gZmFsc2U7Ci0gICAgfQotICAgIHwKLSAgICBwcm9wZXJ0eSAnOicgbWF5YmVfc3BhY2UgZXhw
ciBwcmlvIGRlY2xhcmF0aW9uX3JlY292ZXJ5IHsKLSAgICAgICAgLyogV2hlbiB3ZSBlbmNvdW50
ZXIgc29tZXRoaW5nIGxpa2UgcCB7Y29sb3I6IHJlZCAhaW1wb3J0YW50IGZhaWw7fSB3ZSBzaG91
bGQgZHJvcCB0aGUgZGVjbGFyYXRpb24gKi8KKyAgICB8IHByb3BlcnR5IGRlY2xhcmF0aW9uX3Jl
Y292ZXJ5IHsgJCQgPSBmYWxzZTsgfQorICAgIHwgcHJvcGVydHkgJzonIG1heWJlX3NwYWNlIGV4
cHIgcHJpb3JpdHkgZGVjbGFyYXRpb25fcmVjb3ZlcnkgeworICAgICAgICAvLyBXaGVuIHdlIGVu
Y291bnRlciBzb21ldGhpbmcgbGlrZSBwIHtjb2xvcjogcmVkICFpbXBvcnRhbnQgZmFpbDt9IHdl
IHNob3VsZCBkcm9wIHRoZSBkZWNsYXJhdGlvbi4KICAgICAgICAgcGFyc2VyLT5tYXJrUHJvcGVy
dHlFbmQoZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZGVsZXRlICQ0OwogICAgICAgICAkJCA9IGZh
bHNlOwogICAgIH0KLSAgICB8Ci0gICAgSU1QT1JUQU5UX1NZTSBtYXliZV9zcGFjZSBkZWNsYXJh
dGlvbl9yZWNvdmVyeSB7Ci0gICAgICAgIC8qIEhhbmRsZSB0aGlzIGNhc2U6IGRpdiB7IHRleHQt
YWxpZ246IGNlbnRlcjsgIWltcG9ydGFudCB9IEp1c3QgcmVkdWNlIGF3YXkgdGhlIHN0cmF5ICFp
bXBvcnRhbnQuICovCisgICAgfCBJTVBPUlRBTlRfU1lNIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9u
X3JlY292ZXJ5IHsKKyAgICAgICAgLy8gSGFuZGxlIHRoaXMgY2FzZSAtLSBkaXYgeyB0ZXh0LWFs
aWduOiBjZW50ZXI7ICFpbXBvcnRhbnQgfSAtLSBieSBqdXN0IHJlZHVjaW5nIGF3YXkgdGhlIHN0
cmF5ICFpbXBvcnRhbnQuCiAgICAgICAgICQkID0gZmFsc2U7CiAgICAgfQotICAgIHwKLSAgICBw
cm9wZXJ0eSAnOicgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fcmVjb3ZlcnkgewotICAgICAgICAv
KiBpZiB3ZSBjb21lIGFjcm9zcyBydWxlcyB3aXRoIGludmFsaWQgdmFsdWVzIGxpa2UgdGhpcyBj
YXNlOiBwIHsgd2VpZ2h0OiAqOyB9LCBqdXN0IGRpc2NhcmQgdGhlIHJ1bGUgKi8KKyAgICB8IHBy
b3BlcnR5ICc6JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9yZWNvdmVyeSB7CisgICAgICAgIC8v
IElmIHdlIGNvbWUgYWNyb3NzIHJ1bGVzIHdpdGggaW52YWxpZCB2YWx1ZXMgbGlrZSB0aGlzIGNh
c2U6IHAgeyB3ZWlnaHQ6ICo7IH0sIGp1c3QgZGlzY2FyZCB0aGUgcnVsZS4KICAgICAgICAgcGFy
c2VyLT5tYXJrUHJvcGVydHlFbmQoZmFsc2UsIGZhbHNlKTsKICAgICAgICAgJCQgPSBmYWxzZTsK
ICAgICB9CiAgIDsKIAotZGVjbGFyYXRpb25fcmVjb3Zlcnk6Ci0gICAgZXJyb3IgZXJyb3JfbG9j
YXRpb24gZXJyb3JfcmVjb3ZlcnkgewotICAgICAgICBwYXJzZXItPnN5bnRheEVycm9yKCQyKTsK
LSAgICB9Ci0gIDsKK2RlY2xhcmF0aW9uX3JlY292ZXJ5OiBlcnJvciBlcnJvcl9sb2NhdGlvbiBl
cnJvcl9yZWNvdmVyeSB7IHBhcnNlci0+c3ludGF4RXJyb3IoJDIpOyB9IDsKIAotcHJvcGVydHk6
Ci0gICAgSURFTlQgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IGNzc1Byb3BlcnR5SUQoJDEp
OwotICAgIH0KLSAgOworcHJvcGVydHk6IElERU5UIG1heWJlX3NwYWNlIHsgJCQgPSBjc3NQcm9w
ZXJ0eUlEKCQxKTsgfSA7CiAKLXByaW86Ci0gICAgSU1QT1JUQU5UX1NZTSBtYXliZV9zcGFjZSB7
ICQkID0gdHJ1ZTsgfQotICAgIHwgLyogZW1wdHkgKi8geyAkJCA9IGZhbHNlOyB9Ci0gIDsKK3By
aW9yaXR5OiBJTVBPUlRBTlRfU1lNIG1heWJlX3NwYWNlIHsgJCQgPSB0cnVlOyB9IHwgLyogZW1w
dHkgKi8geyAkJCA9IGZhbHNlOyB9IDsKIAotZXhwcjoKLSAgICB2YWxpZF9leHByCi0gICAgfCB2
YWxpZF9leHByIGV4cHJfcmVjb3ZlcnkgeyAkJCA9IDA7IH0KLSAgOworZXhwcjogdmFsaWRfZXhw
ciB8IHZhbGlkX2V4cHIgZXhwcl9yZWNvdmVyeSB7ICQkID0gMDsgZGVsZXRlICQxOyB9IDsKIAog
dmFsaWRfZXhwcjoKICAgICB0ZXJtIHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0
aW5nVmFsdWVMaXN0KCk7Ci0gICAgICAgICQkLT5hZGRWYWx1ZShwYXJzZXItPnNpbmtGbG9hdGlu
Z1ZhbHVlKCQxKSk7CisgICAgICAgICQkID0gbmV3IENTU1BhcnNlclZhbHVlTGlzdDsKKyAgICAg
ICAgJCQtPmFkZFZhbHVlKCQxKTsKICAgICB9CiAgICAgfCB2YWxpZF9leHByIG9wZXJhdG9yIHRl
cm0gewogICAgICAgICAkJCA9ICQxOwotICAgICAgICBpZiAoJCQpIHsKKyAgICAgICAgaWYgKCEk
JCkKKyAgICAgICAgICAgIGRlc3Ryb3koJDMpOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IGlmICgkMikgewogICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlIHY7CiAgICAgICAgICAg
ICAgICAgdi5pZCA9IENTU1ZhbHVlSW52YWxpZDsKQEAgLTE2NTYsMjkgKzE0NTUsMTcgQEAgdmFs
aWRfZXhwcjoKICAgICAgICAgICAgICAgICB2LmlWYWx1ZSA9ICQyOwogICAgICAgICAgICAgICAg
ICQkLT5hZGRWYWx1ZSh2KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5hZGRWYWx1
ZShwYXJzZXItPnNpbmtGbG9hdGluZ1ZhbHVlKCQzKSk7CisgICAgICAgICAgICAkJC0+YWRkVmFs
dWUoJDMpOwogICAgICAgICB9CiAgICAgfQogICA7CiAKLWV4cHJfcmVjb3Zlcnk6Ci0gICAgZXJy
b3IgZXJyb3JfbG9jYXRpb24gZXJyb3JfcmVjb3ZlcnkKLSAgOworZXhwcl9yZWNvdmVyeTogZXJy
b3IgZXJyb3JfbG9jYXRpb24gZXJyb3JfcmVjb3ZlcnkgOwogCi1vcGVyYXRvcjoKLSAgICAnLycg
bWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9ICcvJzsKLSAgICB9Ci0gIHwgJywnIG1heWJlX3Nw
YWNlIHsKLSAgICAgICAgJCQgPSAnLCc7Ci0gICAgfQotICB8IC8qIGVtcHR5ICovIHsKLSAgICAg
ICAgJCQgPSAwOwotICB9Ci0gIDsKK29wZXJhdG9yOiAnLycgbWF5YmVfc3BhY2UgeyAkJCA9ICcv
JzsgfSB8ICcsJyBtYXliZV9zcGFjZSB7ICQkID0gJywnOyB9IHwgLyogZW1wdHkgKi8geyAkJCA9
IDA7IH0gOwogCiB0ZXJtOgotICB1bmFyeV90ZXJtIG1heWJlX3NwYWNlIHsgJCQgPSAkMTsgfQor
ICB1bmFyeV90ZXJtIG1heWJlX3NwYWNlCiAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfdGVybSBt
YXliZV9zcGFjZSB7ICQkID0gJDI7ICQkLmZWYWx1ZSAqPSAkMTsgfQogICB8IFNUUklORyBtYXli
ZV9zcGFjZSB7ICQkLmlkID0gQ1NTVmFsdWVJbnZhbGlkOyAkJC5zdHJpbmcgPSAkMTsgJCQudW5p
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HOyB9CiAgIHwgSURFTlQgbWF5YmVfc3Bh
Y2UgewpAQCAtMTY5OCwxOCArMTQ4NSwxNSBAQCB0ZXJtOgogICAgICAgJCQuaWQgPSBDU1NWYWx1
ZUludmFsaWQ7CiAgICAgICAkJC5zdHJpbmcgPSAkMzsKICAgICAgICQkLnVuaXQgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU7CisjZWxzZQorICAgICAgJCQuaWQgPSBDU1NW
YWx1ZUludmFsaWQ7CisgICAgICAkJC51bml0ID0gMDsKICNlbmRpZgogICB9CiAgIC8qIEZJWE1F
OiBhY2NvcmRpbmcgdG8gdGhlIHNwZWNzIGEgZnVuY3Rpb24gY2FuIGhhdmUgYSB1bmFyeV9vcGVy
YXRvciBpbiBmcm9udC4gSSBrbm93IG5vIGNhc2Ugd2hlcmUgdGhpcyBtYWtlcyBzZW5zZSAqLwot
ICB8IGZ1bmN0aW9uIG1heWJlX3NwYWNlIHsKLSAgICAgICQkID0gJDE7Ci0gIH0KLSAgfCBjYWxj
X2Z1bmN0aW9uIG1heWJlX3NwYWNlIHsKLSAgICAgICQkID0gJDE7Ci0gIH0KLSAgfCBtaW5fb3Jf
bWF4X2Z1bmN0aW9uIG1heWJlX3NwYWNlIHsKLSAgICAgICQkID0gJDE7Ci0gIH0KKyAgfCBmdW5j
dGlvbiBtYXliZV9zcGFjZQorICB8IGNhbGNfZnVuY3Rpb24gbWF5YmVfc3BhY2UKKyAgfCBtaW5f
b3JfbWF4X2Z1bmN0aW9uIG1heWJlX3NwYWNlCiAgIHwgJyUnIG1heWJlX3NwYWNlIHsgLyogSGFu
ZGxlIHdpZHRoOiAlOyAqLwogICAgICAgJCQuaWQgPSBDU1NWYWx1ZUludmFsaWQ7ICQkLnVuaXQg
PSAwOwogICB9CkBAIC0xNzU1LDI0ICsxNTM5LDIzIEBAIHVuYXJ5X3Rlcm06CiAKIGZ1bmN0aW9u
OgogICAgIEZVTkNUSU9OIG1heWJlX3NwYWNlIGV4cHIgY2xvc2luZ19wYXJlbnRoZXNpcyB7Ci0g
ICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ0Z1bmN0
aW9uKCk7CisgICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gbmV3IENTU1BhcnNlckZ1bmN0
aW9uOwogICAgICAgICBmLT5uYW1lID0gJDE7Ci0gICAgICAgIGYtPmFyZ3MgPSBwYXJzZXItPnNp
bmtGbG9hdGluZ1ZhbHVlTGlzdCgkMyk7CisgICAgICAgIGYtPmFyZ3MgPSBhZG9wdFB0cigkMyk7
CiAgICAgICAgICQkLmlkID0gQ1NTVmFsdWVJbnZhbGlkOwogICAgICAgICAkJC51bml0ID0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uOwogICAgICAgICAkJC5mdW5jdGlvbiA9IGY7CiAgICAgfSB8
CiAgICAgRlVOQ1RJT04gbWF5YmVfc3BhY2UgY2xvc2luZ19wYXJlbnRoZXNpcyB7Ci0gICAgICAg
IENTU1BhcnNlckZ1bmN0aW9uKiBmID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ0Z1bmN0aW9uKCk7
CisgICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gbmV3IENTU1BhcnNlckZ1bmN0aW9uOwog
ICAgICAgICBmLT5uYW1lID0gJDE7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVM
aXN0ID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1ZhbHVlTGlzdCgpOwotICAgICAgICBmLT5hcmdz
ID0gcGFyc2VyLT5zaW5rRmxvYXRpbmdWYWx1ZUxpc3QodmFsdWVMaXN0KTsKKyAgICAgICAgZi0+
YXJncyA9IGFkb3B0UHRyKG5ldyBDU1NQYXJzZXJWYWx1ZUxpc3QpOwogICAgICAgICAkJC5pZCA9
IENTU1ZhbHVlSW52YWxpZDsKICAgICAgICAgJCQudW5pdCA9IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbjsKICAgICAgICAgJCQuZnVuY3Rpb24gPSBmOwogICAgIH0gfAogICAgIEZVTkNUSU9OIG1h
eWJlX3NwYWNlIGV4cHJfcmVjb3ZlcnkgY2xvc2luZ19wYXJlbnRoZXNpcyB7Ci0gICAgICAgIENT
U1BhcnNlckZ1bmN0aW9uKiBmID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ0Z1bmN0aW9uKCk7Cisg
ICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gbmV3IENTU1BhcnNlckZ1bmN0aW9uOwogICAg
ICAgICBmLT5uYW1lID0gJDE7CiAgICAgICAgIGYtPmFyZ3MgPSBudWxscHRyOwogICAgICAgICAk
JC5pZCA9IENTU1ZhbHVlSW52YWxpZDsKQEAgLTE3ODIsMTIgKzE1NjUsMTUgQEAgZnVuY3Rpb246
CiAgIDsKIAogY2FsY19mdW5jX3Rlcm06Ci0gIHVuYXJ5X3Rlcm0geyAkJCA9ICQxOyB9CisgIHVu
YXJ5X3Rlcm0KICAgfCBWQVJGVU5DVElPTiBtYXliZV9zcGFjZSBJREVOVCBjbG9zaW5nX3BhcmVu
dGhlc2lzIHsKICNpZiBFTkFCTEVfQ1NTX1ZBUklBQkxFUwogICAgICAgJCQuaWQgPSBDU1NWYWx1
ZUludmFsaWQ7CiAgICAgICAkJC5zdHJpbmcgPSAkMzsKICAgICAgICQkLnVuaXQgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU7CisjZWxzZQorICAgICAgJCQuaWQgPSBDU1NW
YWx1ZUludmFsaWQ7CisgICAgICAkJC51bml0ID0gMDsKICNlbmRpZgogICB9CiAgIHwgdW5hcnlf
b3BlcmF0b3IgdW5hcnlfdGVybSB7ICQkID0gJDI7ICQkLmZWYWx1ZSAqPSAkMTsgfQpAQCAtMTgw
OCwxMyArMTU5NCwxMSBAQCBjYWxjX2Z1bmNfb3BlcmF0b3I6CiAgICAgfQogICA7CiAKLWNhbGNf
bWF5YmVfc3BhY2U6Ci0gICAgLyogZW1wdHkgKi8KLSAgICB8IFdISVRFU1BBQ0UKLSAgOworY2Fs
Y19tYXliZV9zcGFjZTogLyogZW1wdHkgKi8gfCBXSElURVNQQUNFIDsKIAogY2FsY19mdW5jX3Bh
cmVuX2V4cHI6CiAgICAgJygnIG1heWJlX3NwYWNlIGNhbGNfZnVuY19leHByIGNhbGNfbWF5YmVf
c3BhY2UgY2xvc2luZ19wYXJlbnRoZXNpcyB7CisgICAgICAgICQkID0gMDsKICAgICAgICAgaWYg
KCQzKSB7CiAgICAgICAgICAgICAkJCA9ICQzOwogICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUg
djsKQEAgLTE4MjQsMTU2ICsxNjA4LDExNiBAQCBjYWxjX2Z1bmNfcGFyZW5fZXhwcjoKICAgICAg
ICAgICAgICQkLT5pbnNlcnRWYWx1ZUF0KDAsIHYpOwogICAgICAgICAgICAgdi5pVmFsdWUgPSAn
KSc7CiAgICAgICAgICAgICAkJC0+YWRkVmFsdWUodik7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgJCQgPSAwOworICAgICAgICB9CiAgICAgfQogICA7CiAKLWNhbGNfZnVuY19leHByOgot
ICAgIHZhbGlkX2NhbGNfZnVuY19leHByCi0gICAgfCB2YWxpZF9jYWxjX2Z1bmNfZXhwciBleHBy
X3JlY292ZXJ5IHsgJCQgPSAwOyB9Ci0gIDsKK2NhbGNfZnVuY19leHByOiB2YWxpZF9jYWxjX2Z1
bmNfZXhwciB8IHZhbGlkX2NhbGNfZnVuY19leHByIGV4cHJfcmVjb3ZlcnkgeyAkJCA9IDA7IGRl
bGV0ZSAkMTsgfSA7CiAKIHZhbGlkX2NhbGNfZnVuY19leHByOgogICAgIGNhbGNfZnVuY190ZXJt
IHsKLSAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nVmFsdWVMaXN0KCk7Ci0gICAg
ICAgICQkLT5hZGRWYWx1ZShwYXJzZXItPnNpbmtGbG9hdGluZ1ZhbHVlKCQxKSk7CisgICAgICAg
ICQkID0gbmV3IENTU1BhcnNlclZhbHVlTGlzdDsKKyAgICAgICAgJCQtPmFkZFZhbHVlKCQxKTsK
ICAgICB9CiAgICAgfCBjYWxjX2Z1bmNfZXhwciBjYWxjX2Z1bmNfb3BlcmF0b3IgY2FsY19mdW5j
X3Rlcm0gewotICAgICAgICBpZiAoJDEgJiYgJDIpIHsKLSAgICAgICAgICAgICQkID0gJDE7Cisg
ICAgICAgIE93blB0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IGV4cHJlc3Npb24gPSBhZG9wdFB0cigk
MSk7CisgICAgICAgICQkID0gMDsKKyAgICAgICAgaWYgKGV4cHJlc3Npb24gJiYgJDIpIHsKKyAg
ICAgICAgICAgICQkID0gZXhwcmVzc2lvbi5sZWFrUHRyKCk7CiAgICAgICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSB2OwogICAgICAgICAgICAgdi5pZCA9IENTU1ZhbHVlSW52YWxpZDsKICAgICAgICAg
ICAgIHYudW5pdCA9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcjsKICAgICAgICAgICAgIHYuaVZh
bHVlID0gJDI7CiAgICAgICAgICAgICAkJC0+YWRkVmFsdWUodik7Ci0gICAgICAgICAgICAkJC0+
YWRkVmFsdWUocGFyc2VyLT5zaW5rRmxvYXRpbmdWYWx1ZSgkMykpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgICQkLT5hZGRWYWx1ZSgkMyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0cm95KCQzKTsKKyAgICAgICAgfQogCiAgICAg
fQogICAgIHwgY2FsY19mdW5jX2V4cHIgY2FsY19mdW5jX29wZXJhdG9yIGNhbGNfZnVuY19wYXJl
bl9leHByIHsKLSAgICAgICAgaWYgKCQxICYmICQyICYmICQzKSB7Ci0gICAgICAgICAgICAkJCA9
ICQxOworICAgICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBsZWZ0ID0gYWRvcHRQdHIo
JDEpOworICAgICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiByaWdodCA9IGFkb3B0UHRy
KCQzKTsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBpZiAobGVmdCAmJiAkMiAmJiByaWdodCkg
ewogICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUgdjsKICAgICAgICAgICAgIHYuaWQgPSBDU1NW
YWx1ZUludmFsaWQ7CiAgICAgICAgICAgICB2LnVuaXQgPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3I7CiAgICAgICAgICAgICB2LmlWYWx1ZSA9ICQyOwotICAgICAgICAgICAgJCQtPmFkZFZhbHVl
KHYpOwotICAgICAgICAgICAgJCQtPmV4dGVuZCgqKCQzKSk7Ci0gICAgICAgIH0gZWxzZSAKLSAg
ICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIGxlZnQtPmFkZFZhbHVlKHYpOworICAgICAg
ICAgICAgbGVmdC0+ZXh0ZW5kKCpyaWdodCk7CisgICAgICAgICAgICAkJCA9IGxlZnQubGVha1B0
cigpOworICAgICAgICB9CiAgICAgfQogICAgIHwgY2FsY19mdW5jX3BhcmVuX2V4cHIKICAgOwog
CiBjYWxjX2Z1bmNfZXhwcl9saXN0OgotICAgIGNhbGNfZnVuY19leHByIGNhbGNfbWF5YmVfc3Bh
Y2UgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KKyAgICBjYWxjX2Z1bmNfZXhwciBjYWxjX21h
eWJlX3NwYWNlCiAgICAgfCBjYWxjX2Z1bmNfZXhwcl9saXN0ICcsJyBtYXliZV9zcGFjZSBjYWxj
X2Z1bmNfZXhwciBjYWxjX21heWJlX3NwYWNlIHsKLSAgICAgICAgaWYgKCQxICYmICQ0KSB7Ci0g
ICAgICAgICAgICAkJCA9ICQxOworICAgICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBs
aXN0ID0gYWRvcHRQdHIoJDEpOworICAgICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBl
eHByZXNzaW9uID0gYWRvcHRQdHIoJDQpOworICAgICAgICAkJCA9IDA7CisgICAgICAgIGlmIChs
aXN0ICYmIGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICQkID0gbGlzdC5sZWFrUHRyKCk7CiAg
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSB2OwogICAgICAgICAgICAgdi5pZCA9IENTU1ZhbHVl
SW52YWxpZDsKICAgICAgICAgICAgIHYudW5pdCA9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcjsK
ICAgICAgICAgICAgIHYuaVZhbHVlID0gJywnOwogICAgICAgICAgICAgJCQtPmFkZFZhbHVlKHYp
OwotICAgICAgICAgICAgJCQtPmV4dGVuZCgqKCQ0KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgJCQgPSAwOworICAgICAgICAgICAgJCQtPmV4dGVuZCgqZXhwcmVzc2lvbik7CisgICAg
ICAgIH0KICAgICB9CiAgIDsKIAogY2FsY19mdW5jdGlvbjoKICAgICBDQUxDRlVOQ1RJT04gbWF5
YmVfc3BhY2UgY2FsY19mdW5jX2V4cHIgY2FsY19tYXliZV9zcGFjZSBjbG9zaW5nX3BhcmVudGhl
c2lzIHsKLSAgICAgICAgQ1NTUGFyc2VyRnVuY3Rpb24qIGYgPSBwYXJzZXItPmNyZWF0ZUZsb2F0
aW5nRnVuY3Rpb24oKTsKKyAgICAgICAgQ1NTUGFyc2VyRnVuY3Rpb24qIGYgPSBuZXcgQ1NTUGFy
c2VyRnVuY3Rpb247CiAgICAgICAgIGYtPm5hbWUgPSAkMTsKLSAgICAgICAgZi0+YXJncyA9IHBh
cnNlci0+c2lua0Zsb2F0aW5nVmFsdWVMaXN0KCQzKTsKKyAgICAgICAgZi0+YXJncyA9IGFkb3B0
UHRyKCQzKTsKICAgICAgICAgJCQuaWQgPSBDU1NWYWx1ZUludmFsaWQ7CiAgICAgICAgICQkLnVu
aXQgPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb247CiAgICAgICAgICQkLmZ1bmN0aW9uID0gZjsK
ICAgICB9CiAgICAgfCBDQUxDRlVOQ1RJT04gbWF5YmVfc3BhY2UgZXhwcl9yZWNvdmVyeSBjbG9z
aW5nX3BhcmVudGhlc2lzIHsKKyAgICAgICAgJCQuaWQgPSBDU1NWYWx1ZUludmFsaWQ7CisgICAg
ICAgICQkLnVuaXQgPSAwOwogICAgICAgICBZWUVSUk9SOwogICAgIH0KICAgICA7CiAKIAotbWlu
X29yX21heDoKLSAgICBNSU5GVU5DVElPTiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAg
IHwgTUFYRlVOQ1RJT04gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7CittaW5fb3Jf
bWF4OiBNSU5GVU5DVElPTiB8IE1BWEZVTkNUSU9OIDsKIAogbWluX29yX21heF9mdW5jdGlvbjoK
ICAgICBtaW5fb3JfbWF4IG1heWJlX3NwYWNlIGNhbGNfZnVuY19leHByX2xpc3QgY2xvc2luZ19w
YXJlbnRoZXNpcyB7Ci0gICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gcGFyc2VyLT5jcmVh
dGVGbG9hdGluZ0Z1bmN0aW9uKCk7CisgICAgICAgIENTU1BhcnNlckZ1bmN0aW9uKiBmID0gbmV3
IENTU1BhcnNlckZ1bmN0aW9uOwogICAgICAgICBmLT5uYW1lID0gJDE7Ci0gICAgICAgIGYtPmFy
Z3MgPSBwYXJzZXItPnNpbmtGbG9hdGluZ1ZhbHVlTGlzdCgkMyk7CisgICAgICAgIGYtPmFyZ3Mg
PSBhZG9wdFB0cigkMyk7CiAgICAgICAgICQkLmlkID0gQ1NTVmFsdWVJbnZhbGlkOwogICAgICAg
ICAkJC51bml0ID0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uOwogICAgICAgICAkJC5mdW5jdGlv
biA9IGY7CiAgICAgfSAKICAgICB8IG1pbl9vcl9tYXggbWF5YmVfc3BhY2UgZXhwcl9yZWNvdmVy
eSBjbG9zaW5nX3BhcmVudGhlc2lzIHsKKyAgICAgICAgJCQuaWQgPSBDU1NWYWx1ZUludmFsaWQ7
CisgICAgICAgICQkLnVuaXQgPSAwOwogICAgICAgICBZWUVSUk9SOwogICAgIH0KICAgICA7CiAK
IC8qIGVycm9yIGhhbmRsaW5nIHJ1bGVzICovCiAKLXNhdmVfYmxvY2s6Ci0gICAgY2xvc2luZ19i
cmFjZSB7Ci0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gIHwgZXJyb3IgY2xvc2luZ19icmFjZSB7
Ci0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gICAgOworc2F2ZV9ibG9jazogY2xvc2luZ19icmFj
ZSB8IGVycm9yIGNsb3NpbmdfYnJhY2UgOwogCi1pbnZhbGlkX2F0OgotICAgIEFUS0VZV09SRCBl
cnJvciBpbnZhbGlkX2Jsb2NrIHsKLSAgICAgICAgJCQgPSAwOwotICAgIH0KLSAgfCBBVEtFWVdP
UkQgZXJyb3IgJzsnIHsKLSAgICAgICAgJCQgPSAwOwotICAgIH0KLSAgICA7Ci0KLWludmFsaWRf
cnVsZToKLSAgICBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKLSAgICAgICAgJCQgPSAwOwotICAgIH0K
LQotLyoKLSAgU2VlbXMgbGlrZSB0aGUgdHdvIHJ1bGVzIGJlbG93IGFyZSB0cnlpbmcgdG9vIG11
Y2ggYW5kIHZpb2xhdGluZwotICBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2V2aWwvbWl4ZWQv
Y3NzZXJyb3JoYW5kbGluZy5odG1sCitpbnZhbGlkX2F0OiBBVEtFWVdPUkQgZXJyb3IgaW52YWxp
ZF9ibG9jayB8IEFUS0VZV09SRCBlcnJvciAnOycgOwogCi0gIHwgZXJyb3IgJzsnIHsKLSAgICAg
ICAgJCQgPSAwOwotICAgIH0KLSAgfCBlcnJvciAnfScgewotICAgICAgICAkJCA9IDA7Ci0gICAg
fQotKi8KLSAgICA7CitpbnZhbGlkX3J1bGU6IGVycm9yIGludmFsaWRfYmxvY2sgOwogCi1pbnZh
bGlkX2Jsb2NrOgotICAgICd7JyBlcnJvcl9yZWNvdmVyeSBjbG9zaW5nX2JyYWNlIHsKLSAgICAg
ICAgcGFyc2VyLT5pbnZhbGlkQmxvY2tIaXQoKTsKLSAgICB9Ci0gICAgOworaW52YWxpZF9ibG9j
azogJ3snIGVycm9yX3JlY292ZXJ5IGNsb3NpbmdfYnJhY2UgeyBwYXJzZXItPmludmFsaWRCbG9j
a0hpdCgpOyB9IDsKIAotaW52YWxpZF9zcXVhcmVfYnJhY2tldHNfYmxvY2s6Ci0gICAgJ1snIGVy
cm9yX3JlY292ZXJ5ICddJwotICB8ICdbJyBlcnJvcl9yZWNvdmVyeSBUT0tFTl9FT0YKLSAgICA7
CitpbnZhbGlkX3NxdWFyZV9icmFja2V0c19ibG9jazogJ1snIGVycm9yX3JlY292ZXJ5ICddJyB8
ICdbJyBlcnJvcl9yZWNvdmVyeSBUT0tFTl9FT0YgOwogCi1pbnZhbGlkX3BhcmVudGhlc2VzX2Js
b2NrOgotICAgIG9wZW5pbmdfcGFyZW50aGVzaXMgZXJyb3JfcmVjb3ZlcnkgY2xvc2luZ19wYXJl
bnRoZXNpczsKK2ludmFsaWRfcGFyZW50aGVzZXNfYmxvY2s6IG9wZW5pbmdfcGFyZW50aGVzaXMg
ZXJyb3JfcmVjb3ZlcnkgY2xvc2luZ19wYXJlbnRoZXNpczsKIAogb3BlbmluZ19wYXJlbnRoZXNp
czoKICAgICAnKCcgfCBGVU5DVElPTiB8IENBTENGVU5DVElPTiB8IFZBUkZVTkNUSU9OIHwgTUlO
RlVOQ1RJT04gfCBNQVhGVU5DVElPTiB8IEFOWUZVTkNUSU9OIHwgTk9URlVOQ1RJT04KQEAgLTE5
ODIsMTAgKzE3MjYsNyBAQCBvcGVuaW5nX3BhcmVudGhlc2lzOgogI2VuZGlmCiAgICAgOwogCi1l
cnJvcl9sb2NhdGlvbjogewotICAgICAgICAkJCA9IHBhcnNlci0+Y3VycmVudExvY2F0aW9uKCk7
Ci0gICAgfQotICAgIDsKK2Vycm9yX2xvY2F0aW9uOiB7ICQkID0gcGFyc2VyLT5jdXJyZW50TG9j
YXRpb24oKTsgfSA7CiAKIGVycm9yX3JlY292ZXJ5OgogICAgIC8qIGVtcHR5ICovCkBAIC0xOTk2
LDQgKzE3MzcsMyBAQCBlcnJvcl9yZWNvdmVyeToKICAgICA7CiAKICUlCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKaW5kZXggNmQyNDY1OTI1M2IxZmQ0ZmU5Y2QwMTg5YjMwYTM2NzYxZTk4YmEy
OC4uOWRkY2IwNmE5ZDUyMjJjMzk0ZTZmMzNlNWQ3Njc0YWQ3YjJmNzEzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAKQEAgLTM1NywxMSArMzU3LDYgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIo
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIENTU1BhcnNlcjo6fkNTU1BhcnNlcigp
CiB7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0KLSAgICBkZWxldGVBbGxWYWx1ZXMobV9mbG9h
dGluZ1NlbGVjdG9ycyk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvclZl
Y3RvcnMpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nVmFsdWVMaXN0cyk7Ci0gICAg
ZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdGdW5jdGlvbnMpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTUyMiw3ICs1MTcsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNDb2xvclByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvcjoKLSNlbmRpZiAv
LyBDU1MzX1RFWFQKKyNlbmRpZgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFz
aXNDb2xvcjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgpAQCAtOTIyMSwxNCArOTIxNiwx
MiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWx0ZXJSdWxlUGFyYW1ldGVycygpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRmlsdGVyUnVs
ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZpbHRlck5hbWUpCitQYXNzUmVmUHRyPFN0eWxlUnVs
ZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlRmlsdGVyUnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcm
IGZpbHRlck5hbWUpCiB7CiAgICAgUmVmUHRyPFN0eWxlUnVsZUZpbHRlcj4gcnVsZSA9IFN0eWxl
UnVsZUZpbHRlcjo6Y3JlYXRlKGZpbHRlck5hbWUsIGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7
CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgU3R5bGVSdWxlRmlsdGVyKiByZXN1bHQgPSBy
dWxlLmdldCgpOwotICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAg
ICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlKCk7CiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoQ1NTX1NIQURFUlMpCkBAIC0xMTQ0OCwxNjEgKzExNDQxLDE4IEBAIHJlc3RhcnRBZnRlckNv
bW1lbnQ6CiAgICAgcmV0dXJuIHRva2VuKCk7CiB9CiAKLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQ
YXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JXaXRoVGFnTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdRTmFtZSkKLXsKLSAgICBDU1NQYXJzZXJTZWxlY3Rvciogc2VsZWN0b3IgPSBuZXcg
Q1NTUGFyc2VyU2VsZWN0b3IodGFnUU5hbWUpOwotICAgIG1fZmxvYXRpbmdTZWxlY3RvcnMuYWRk
KHNlbGVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3I7Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9y
KiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKQotewotICAgIENTU1BhcnNlclNl
bGVjdG9yKiBzZWxlY3RvciA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKLSAgICBtX2Zsb2F0aW5n
U2VsZWN0b3JzLmFkZChzZWxlY3Rvcik7Ci0gICAgcmV0dXJuIHNlbGVjdG9yOwotfQotCi1QYXNz
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9y
KENTU1BhcnNlclNlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoc2VsZWN0b3IpIHsKLSAg
ICAgICAgQVNTRVJUKG1fZmxvYXRpbmdTZWxlY3RvcnMuY29udGFpbnMoc2VsZWN0b3IpKTsKLSAg
ICAgICAgbV9mbG9hdGluZ1NlbGVjdG9ycy5yZW1vdmUoc2VsZWN0b3IpOwotICAgIH0KLSAgICBy
ZXR1cm4gYWRvcHRQdHIoc2VsZWN0b3IpOwotfQotCi1WZWN0b3I8T3duUHRyPENTU1BhcnNlclNl
bGVjdG9yPiA+KiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JWZWN0b3IoKQotewot
ICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9yVmVjdG9yID0g
bmV3IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID47Ci0gICAgbV9mbG9hdGluZ1Nl
bGVjdG9yVmVjdG9ycy5hZGQoc2VsZWN0b3JWZWN0b3IpOwotICAgIHJldHVybiBzZWxlY3RvclZl
Y3RvcjsKLX0KLQotUGFzc093blB0cjxWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+
ID4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdTZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENT
U1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvclZlY3RvcikKLXsKLSAgICBpZiAoc2VsZWN0b3JW
ZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMuY29udGFp
bnMoc2VsZWN0b3JWZWN0b3IpKTsKLSAgICAgICAgbV9mbG9hdGluZ1NlbGVjdG9yVmVjdG9ycy5y
ZW1vdmUoc2VsZWN0b3JWZWN0b3IpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRQdHIoc2VsZWN0
b3JWZWN0b3IpOwotfQotCi1DU1NQYXJzZXJWYWx1ZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlRmxv
YXRpbmdWYWx1ZUxpc3QoKQotewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogbGlzdCA9IG5ldyBD
U1NQYXJzZXJWYWx1ZUxpc3Q7Ci0gICAgbV9mbG9hdGluZ1ZhbHVlTGlzdHMuYWRkKGxpc3QpOwot
ICAgIHJldHVybiBsaXN0OwotfQotCi1QYXNzT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gQ1NT
UGFyc2VyOjpzaW5rRmxvYXRpbmdWYWx1ZUxpc3QoQ1NTUGFyc2VyVmFsdWVMaXN0KiBsaXN0KQot
ewotICAgIGlmIChsaXN0KSB7Ci0gICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nVmFsdWVMaXN0cy5j
b250YWlucyhsaXN0KSk7Ci0gICAgICAgIG1fZmxvYXRpbmdWYWx1ZUxpc3RzLnJlbW92ZShsaXN0
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGxpc3QpOwotfQotCi1DU1NQYXJzZXJGdW5j
dGlvbiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ0Z1bmN0aW9uKCkKLXsKLSAgICBDU1NQYXJz
ZXJGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgQ1NTUGFyc2VyRnVuY3Rpb247Ci0gICAgbV9mbG9h
dGluZ0Z1bmN0aW9ucy5hZGQoZnVuY3Rpb24pOwotICAgIHJldHVybiBmdW5jdGlvbjsKLX0KLQot
UGFzc093blB0cjxDU1NQYXJzZXJGdW5jdGlvbj4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdGdW5j
dGlvbihDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb24pCi17Ci0gICAgaWYgKGZ1bmN0aW9uKSB7
Ci0gICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nRnVuY3Rpb25zLmNvbnRhaW5zKGZ1bmN0aW9uKSk7
Ci0gICAgICAgIG1fZmxvYXRpbmdGdW5jdGlvbnMucmVtb3ZlKGZ1bmN0aW9uKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKGZ1bmN0aW9uKTsKLX0KLQotQ1NTUGFyc2VyVmFsdWUmIENTU1Bh
cnNlcjo6c2lua0Zsb2F0aW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAgICBBU1NF
UlQobV9mbG9hdGluZ0Z1bmN0aW9ucy5jb250YWlucyh2YWx1ZS5mdW5jdGlvbikpOwotICAgICAg
ICBtX2Zsb2F0aW5nRnVuY3Rpb25zLnJlbW92ZSh2YWx1ZS5mdW5jdGlvbik7Ci0gICAgfQotICAg
IHJldHVybiB2YWx1ZTsKLX0KLQotTWVkaWFRdWVyeUV4cCogQ1NTUGFyc2VyOjpjcmVhdGVGbG9h
dGluZ01lZGlhUXVlcnlFeHAoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVzKQotewotICAgIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwID0g
TWVkaWFRdWVyeUV4cDo6Y3JlYXRlKG1lZGlhRmVhdHVyZSwgdmFsdWVzKTsKLSAgICByZXR1cm4g
bV9mbG9hdGluZ01lZGlhUXVlcnlFeHAuZ2V0KCk7Ci19Ci0KLVBhc3NPd25QdHI8TWVkaWFRdWVy
eUV4cD4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKE1lZGlhUXVlcnlFeHAq
IGV4cHJlc3Npb24pCi17Ci0gICAgQVNTRVJUX1VOVVNFRChleHByZXNzaW9uLCBleHByZXNzaW9u
ID09IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKTsKLSAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlh
UXVlcnlFeHAucmVsZWFzZSgpOwotfQotCi1WZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4q
IENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgpCi17Ci0gICAgbV9m
bG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxPd25QdHI8TWVk
aWFRdWVyeUV4cD4gPik7Ci0gICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdC5n
ZXQoKTsKLX0KLQotUGFzc093blB0cjxWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gPiBD
U1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KFZlY3RvcjxPd25QdHI8TWVk
aWFRdWVyeUV4cD4gPiogbGlzdCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0g
bV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KTsKLSAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlh
UXVlcnlFeHBMaXN0LnJlbGVhc2UoKTsKLX0KLQotTWVkaWFRdWVyeSogQ1NTUGFyc2VyOjpjcmVh
dGVGbG9hdGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeTo6UmVzdHJpY3RvciByZXN0cmljdG9yLCBj
b25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxWZWN0b3I8T3duUHRyPE1lZGlhUXVl
cnlFeHA+ID4gPiBleHByZXNzaW9ucykKLXsKLSAgICBtX2Zsb2F0aW5nTWVkaWFRdWVyeSA9IGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5KHJlc3RyaWN0b3IsIG1lZGlhVHlwZSwgZXhwcmVzc2lvbnMp
KTsKLSAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlhUXVlcnkuZ2V0KCk7Ci19Ci0KLU1lZGlhUXVl
cnkqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KFBhc3NPd25QdHI8VmVjdG9y
PE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+ID4gZXhwcmVzc2lvbnMpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwgZXhwcmVzc2lv
bnMpOwotfQotCi1QYXNzT3duUHRyPE1lZGlhUXVlcnk+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5n
TWVkaWFRdWVyeShNZWRpYVF1ZXJ5KiBxdWVyeSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHF1ZXJ5
LCBxdWVyeSA9PSBtX2Zsb2F0aW5nTWVkaWFRdWVyeSk7Ci0gICAgcmV0dXJuIG1fZmxvYXRpbmdN
ZWRpYVF1ZXJ5LnJlbGVhc2UoKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+
KiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nS2V5ZnJhbWVWZWN0b3IoKQotewotICAgIG1fZmxv
YXRpbmdLZXlmcmFtZVZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5
ZnJhbWU+ID4oKSk7Ci0gICAgcmV0dXJuIG1fZmxvYXRpbmdLZXlmcmFtZVZlY3Rvci5nZXQoKTsK
LX0KLQotUGFzc093blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4gPiBDU1NQYXJz
ZXI6OnNpbmtGbG9hdGluZ0tleWZyYW1lVmVjdG9yKFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gPioga2V5ZnJhbWVWZWN0b3IpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChrZXlmcmFtZVZlY3Rv
ciwgbV9mbG9hdGluZ0tleWZyYW1lVmVjdG9yID09IGtleWZyYW1lVmVjdG9yKTsKLSAgICByZXR1
cm4gbV9mbG9hdGluZ0tleWZyYW1lVmVjdG9yLnJlbGVhc2UoKTsKLX0KLQotTWVkaWFRdWVyeVNl
dCogQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYVF1ZXJ5U2V0KCkKLXsKLSAgICBSZWZQdHI8TWVkaWFR
dWVyeVNldD4gcXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpOwotICAgIE1lZGlhUXVl
cnlTZXQqIHJlc3VsdCA9IHF1ZXJpZXMuZ2V0KCk7Ci0gICAgbV9wYXJzZWRNZWRpYVF1ZXJ5U2V0
cy5hcHBlbmQocXVlcmllcy5yZWxlYXNlKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0
eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJT
dHJpbmcmIHVybCwgTWVkaWFRdWVyeVNldCogbWVkaWEpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVy
bCwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKIHsKICAgICBpZiAoIW1lZGlhIHx8
ICFtX2FsbG93SW1wb3J0UnVsZXMpIHsKICAgICAgICAgcG9wUnVsZURhdGEoKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IHJ1bGUgPSBTdHls
ZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1cmwsIG1lZGlhKTsKLSAgICBTdHlsZVJ1bGVJbXBvcnQqIHJl
c3VsdCA9IHJ1bGUuZ2V0KCk7Ci0gICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNl
KCkpOwogICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBydWxlLnJlbGVhc2UoKTsKIH0KIAotU3R5bGVS
dWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYVJ1bGUoTWVkaWFRdWVyeVNldCogbWVkaWEs
IFJ1bGVMaXN0KiBydWxlcykKK1Bhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpj
cmVhdGVNZWRpYVJ1bGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgUnVsZUxpc3Qq
IHJ1bGVzKQogewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnMgPSBmYWxzZTsKICAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IHJ1bGU7CkBAIC0x
MTYxMywxOSArMTE0NjMsMTcgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVNZWRp
YVJ1bGUoTWVkaWFRdWVyeVNldCogbWVkaWEsIFJ1bGVMaXN0KiBydWxlcykKICAgICAgICAgcnVs
ZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUoTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCksIGVtcHR5
UnVsZXMpOwogICAgIH0gZWxzZQogICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0
ZShtZWRpYSwgcnVsZXMgPyAqcnVsZXMgOiBlbXB0eVJ1bGVzKTsKLSAgICBTdHlsZVJ1bGVNZWRp
YSogcmVzdWx0ID0gcnVsZS5nZXQoKTsKLSAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJl
bGVhc2UoKSk7CiAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZSgpOwogfQogCi1T
dHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUVtcHR5TWVkaWFSdWxlKFJ1bGVMaXN0KiBy
dWxlcykKK1Bhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVhdGVFbXB0eU1l
ZGlhUnVsZShSdWxlTGlzdCogcnVsZXMpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1lZGlhUnVsZShN
ZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKS5nZXQoKSwgcnVsZXMpOworICAgIHJldHVybiBjcmVhdGVN
ZWRpYVJ1bGUoTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCksIHJ1bGVzKTsKIH0KIAogI2lmIEVOQUJM
RShDU1MzX0NPTkRJVElPTkFMX1JVTEVTKQotU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVh
dGVTdXBwb3J0c1J1bGUoYm9vbCBjb25kaXRpb25Jc1N1cHBvcnRlZCwgUnVsZUxpc3QqIHJ1bGVz
KQorUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZVN1cHBvcnRzUnVs
ZShib29sIGNvbmRpdGlvbklzU3VwcG9ydGVkLCBSdWxlTGlzdCogcnVsZXMpCiB7CiAgICAgbV9h
bGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwog
CkBAIC0xMTY0NywxMSArMTE0OTUsOSBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0
ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9ydGVkLCBSdWxlTGlzdAogICAgICAg
ICBydWxlID0gU3R5bGVSdWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25kaXRp
b25Jc1N1cHBvcnRlZCwgZW1wdHlSdWxlcyk7CiAgICAgfQogCi0gICAgU3R5bGVSdWxlU3VwcG9y
dHMqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7Ci0gICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5y
ZWxlYXNlKCkpOwogICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQo
KTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZSgpOwogfQog
CiB2b2lkIENTU1BhcnNlcjo6bWFya1N1cHBvcnRzUnVsZUhlYWRlclN0YXJ0KCkKQEAgLTExNjg0
LDE1ICsxMTUzMCw2IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6
cG9wU3VwcG9ydHNSdWxlRGF0YSgpCiAKICNlbmRpZgogCi1DU1NQYXJzZXI6OlJ1bGVMaXN0KiBD
U1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKLXsKLSAgICBPd25QdHI8UnVsZUxpc3Q+IGxpc3Qg
PSBhZG9wdFB0cihuZXcgUnVsZUxpc3QpOwotICAgIFJ1bGVMaXN0KiBsaXN0UHRyID0gbGlzdC5n
ZXQoKTsKLQotICAgIG1fcGFyc2VkUnVsZUxpc3RzLmFwcGVuZChsaXN0LnJlbGVhc2UoKSk7Ci0g
ICAgcmV0dXJuIGxpc3RQdHI7Ci19Ci0KIHZvaWQgQ1NTUGFyc2VyOjpwcm9jZXNzQW5kQWRkTmV3
UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCkKIHsKICAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJj
ZURhdGEoKSkKQEAgLTExNzU3LDQ1ICsxMTU5NCw0MSBAQCBib29sIENTU1BhcnNlcjo6aXNMb2dn
aW5nRXJyb3JzKCkKIAogdm9pZCBDU1NQYXJzZXI6OmxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgaW50IGxpbmVOdW1iZXIpCiB7Ci0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzExNDMxMz4gQ1NTIFBhcnNlciBDb25zb2xlTWVzc2FnZSBlcnJvcnMgc2hvdWxkIGluY2x1
ZGUgY29sdW1uIG51bWJlcnMKKyAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE0
MzEzPiBDU1MgcGFyc2VyIGNvbnNvbGUgbWVzc2FnZSBlcnJvcnMgc2hvdWxkIGluY2x1ZGUgY29s
dW1uIG51bWJlcnMuCiAgICAgUGFnZUNvbnNvbGUmIGNvbnNvbGUgPSBtX3N0eWxlU2hlZXQtPnNp
bmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgpLT5jb25zb2xlKCk7CiAgICAgY29uc29sZS5hZGRN
ZXNzYWdlKENTU01lc3NhZ2VTb3VyY2UsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIG1f
c3R5bGVTaGVldC0+YmFzZVVSTCgpLnN0cmluZygpLCBsaW5lTnVtYmVyICsgMSwgMCk7CiB9CiAK
LVN0eWxlUnVsZUtleWZyYW1lcyogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4g
PiBwb3BLZXlmcmFtZXMpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gQ1NTUGFyc2Vy
OjpjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxWZWN0
b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4gcG9wS2V5ZnJhbWVzKQogewotICAgIE93blB0cjxW
ZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4gPiBrZXlmcmFtZXMgPSBwb3BLZXlmcmFtZXM7
CisgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4+PiBrZXlmcmFtZXMgPSBw
b3BLZXlmcmFtZXM7CiAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURl
Y2xhcmF0aW9ucyA9IGZhbHNlOwogICAgIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+IHJ1bGUg
PSBTdHlsZVJ1bGVLZXlmcmFtZXM6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5ZnJhbWVzLT5zaXplKCk7ICsraSkKICAgICAgICAgcnVsZS0+cGFyc2VyQXBwZW5kS2V5
ZnJhbWUoa2V5ZnJhbWVzLT5hdChpKSk7CiAgICAgcnVsZS0+c2V0TmFtZShuYW1lKTsKLSAgICBT
dHlsZVJ1bGVLZXlmcmFtZXMqIHJ1bGVQdHIgPSBydWxlLmdldCgpOwotICAgIG1fcGFyc2VkUnVs
ZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291
cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJ1bGVQdHI7CisgICAgcmV0dXJuIHJ1bGUu
cmVsZWFzZSgpOwogfQogCi1TdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVs
ZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMpCitQYXNzUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piogc2VsZWN0b3JzKQogewotICAgIFN0eWxlUnVsZSogcmVz
dWx0ID0gMDsKKyAgICBSZWZQdHI8U3R5bGVSdWxlPiBydWxlOwogICAgIGlmIChzZWxlY3RvcnMp
IHsKICAgICAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gZmFsc2U7CiAgICAgICAgIG1fYWxsb3dO
YW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKICAgICAgICAgaWYgKG1faGFzRm9udEZhY2VP
bmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7Ci0gICAg
ICAgIFJlZlB0cjxTdHlsZVJ1bGU+IHJ1bGUgPSBTdHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxl
Y3RvckxpbmVOdW1iZXIsIGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgICAgIHJ1bGUg
PSBTdHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIsIGNyZWF0ZVN0eWxl
UHJvcGVydHlTZXQoKSk7CiAgICAgICAgIHJ1bGUtPnBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3Io
KnNlbGVjdG9ycyk7Ci0gICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7Ci0gICAgICAgIG1fcGFy
c2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICAgICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIH0gZWxzZQogICAgICAgICBwb3BSdWxl
RGF0YSgpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIHJ1bGUucmVsZWFzZSgpOwogfQogCi1TdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNy
ZWF0ZUZvbnRGYWNlUnVsZSgpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6
Y3JlYXRlRm9udEZhY2VSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93
TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewpAQCAtMTE4MTQsMTQgKzExNjQ3
LDEyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAg
ICB9CiAgICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBydWxlID0gU3R5bGVSdWxlRm9udEZh
Y2U6OmNyZWF0ZShjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgIGNsZWFyUHJvcGVydGll
cygpOwotICAgIFN0eWxlUnVsZUZvbnRGYWNlKiByZXN1bHQgPSBydWxlLmdldCgpOwotICAgIG1f
cGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3
UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gcnVsZS5yZWxlYXNlKCk7CiB9CiAKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKLVN0eWxlUnVs
ZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQorUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBy
dWxlcykKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFy
YXRpb25zID0gZmFsc2U7CiAgICAgUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IHJ1bGU7CkBAIC0xMTgz
MSwxMCArMTE2NjIsOCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxl
KFJ1bGVMaXN0KiBydWxlcykKICAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKICAgICAgICAg
cnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVzKTsKICAgICB9Ci0gICAgU3R5
bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKLSAgICBtX3BhcnNlZFJ1bGVzLmFwcGVu
ZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJ
Zk5lZWRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZSgp
OwogfQogI2VuZGlmCiAKQEAgLTExODU1LDMwICsxMTY4NCwyOSBAQCBRdWFsaWZpZWROYW1lIENT
U1BhcnNlcjo6ZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjbwogICAgIHJldHVybiBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBtX3N0
eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShwcmVmaXgpKTsKIH0KIAotQ1NTUGFyc2VyU2Vs
ZWN0b3IqIENTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmllcnNXaXRoTmFtZXNwYWNlSWZOZWVkZWQo
Q1NTUGFyc2VyU2VsZWN0b3IqIHNwZWNpZmllcnMpCit2b2lkIENTU1BhcnNlcjo6cmV3cml0ZVNw
ZWNpZmllcnNXaXRoTmFtZXNwYWNlSWZOZWVkZWQoQ1NTUGFyc2VyU2VsZWN0b3ImIHNwZWNpZmll
cnMpCiB7Ci0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFjZSAhPSBzdGFyQXRvbSB8fCBzcGVjaWZp
ZXJzLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHJld3JpdGVTcGVj
aWZpZXJzV2l0aEVsZW1lbnROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3BlY2lmaWVycywgLyp0
YWdJc0Zvck5hbWVzcGFjZVJ1bGUqL3RydWUpOwotICAgIHJldHVybiBzcGVjaWZpZXJzOworICAg
IGlmIChtX2RlZmF1bHROYW1lc3BhY2UgIT0gc3RhckF0b20gfHwgc3BlY2lmaWVycy5pc0N1c3Rv
bVBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5h
bWUobnVsbEF0b20sIHN0YXJBdG9tLCBzcGVjaWZpZXJzLCAvKnRhZ0lzRm9yTmFtZXNwYWNlUnVs
ZSovdHJ1ZSk7CiB9CiAKLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXI6OnJld3JpdGVTcGVj
aWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlUHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1lLCBDU1NQYXJzZXJTZWxlY3Rvciogc3Bl
Y2lmaWVycywgYm9vbCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUpCit2b2lkIENTU1BhcnNlcjo6cmV3
cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VQcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVj
dG9yJiBzcGVjaWZpZXJzLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSkKIHsKICAgICBBdG9t
aWNTdHJpbmcgZGV0ZXJtaW5lZE5hbWVzcGFjZSA9IG5hbWVzcGFjZVByZWZpeCAhPSBudWxsQXRv
bSAmJiBtX3N0eWxlU2hlZXQgPyBtX3N0eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShuYW1l
c3BhY2VQcmVmaXgpIDogbV9kZWZhdWx0TmFtZXNwYWNlOwogICAgIFF1YWxpZmllZE5hbWUgdGFn
KG5hbWVzcGFjZVByZWZpeCwgZWxlbWVudE5hbWUsIGRldGVybWluZWROYW1lc3BhY2UpOwogCi0g
ICAgaWYgKCFzcGVjaWZpZXJzLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgeworICAgIGlmICgh
c3BlY2lmaWVycy5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICBpZiAodGFnID09
IGFueVFOYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gc3BlY2lmaWVyczsKKyAgICAgICAgICAg
IHJldHVybjsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgIGlmICghKHNwZWNpZmll
cnMtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ3VlKSkKKyAgICAgICAgaWYg
KHNwZWNpZmllcnMucHNldWRvVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DdWUpCiAjZW5k
aWYKLSAgICAgICAgICAgIHNwZWNpZmllcnMtPnByZXBlbmRUYWdTZWxlY3Rvcih0YWcsIHRhZ0lz
Rm9yTmFtZXNwYWNlUnVsZSk7Ci0gICAgICAgIHJldHVybiBzcGVjaWZpZXJzOworICAgICAgICAg
ICAgc3BlY2lmaWVycy5wcmVwZW5kVGFnU2VsZWN0b3IodGFnLCB0YWdJc0Zvck5hbWVzcGFjZVJ1
bGUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGxh
c3RTaGFkb3dEZXNjZW5kYW50ID0gc3BlY2lmaWVyczsKLSAgICBDU1NQYXJzZXJTZWxlY3Rvciog
aGlzdG9yeSA9IHNwZWNpZmllcnM7CisgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGxhc3RTaGFkb3dE
ZXNjZW5kYW50ID0gJnNwZWNpZmllcnM7CisgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGhpc3Rvcnkg
PSAmc3BlY2lmaWVyczsKICAgICB3aGlsZSAoaGlzdG9yeS0+dGFnSGlzdG9yeSgpKSB7CiAgICAg
ICAgIGhpc3RvcnkgPSBoaXN0b3J5LT50YWdIaXN0b3J5KCk7CiAgICAgICAgIGlmIChoaXN0b3J5
LT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBoaXN0b3J5LT5oYXNTaGFkb3dEZXNjZW5kYW50
KCkpCkBAIC0xMTg4OCwxOCArMTE3MTYsMTYgQEAgQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNl
cjo6cmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5hbWUoY29uc3QgQXRvbWljU3RyaW4KICAg
ICBpZiAobGFzdFNoYWRvd0Rlc2NlbmRhbnQtPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICBpZiAo
dGFnICE9IGFueVFOYW1lKCkpCiAgICAgICAgICAgICBsYXN0U2hhZG93RGVzY2VuZGFudC0+dGFn
SGlzdG9yeSgpLT5wcmVwZW5kVGFnU2VsZWN0b3IodGFnLCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUp
OwotICAgICAgICByZXR1cm4gc3BlY2lmaWVyczsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIEZvciBzaGFkb3ctSUQgcHNldWRvLWVsZW1lbnRzIHRvIGJlIGNvcnJlY3RseSBtYXRj
aGVkLCB0aGUgU2hhZG93RGVzY2VuZGFudCBjb21iaW5hdG9yIGhhcyB0byBiZSB1c2VkLgogICAg
IC8vIFdlIHRoZXJlZm9yZSBjcmVhdGUgYSBuZXcgU2VsZWN0b3Igd2l0aCB0aGF0IGNvbWJpbmF0
b3IgaGVyZSBpbiBhbnkgY2FzZSwgZXZlbiBpZiBtYXRjaGluZyBhbnkgKGhvc3QpIGVsZW1lbnQg
aW4gYW55IG5hbWVzcGFjZSAoaS5lLiAnKicpLgotICAgIE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gZWxlbWVudE5hbWVTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBDU1NQYXJzZXJTZWxlY3Rvcih0
YWcpKTsKLSAgICBsYXN0U2hhZG93RGVzY2VuZGFudC0+c2V0VGFnSGlzdG9yeShlbGVtZW50TmFt
ZVNlbGVjdG9yLnJlbGVhc2UoKSk7CisgICAgbGFzdFNoYWRvd0Rlc2NlbmRhbnQtPnNldFRhZ0hp
c3RvcnkoYWRvcHRQdHIobmV3IENTU1BhcnNlclNlbGVjdG9yKHRhZykpKTsKICAgICBsYXN0U2hh
ZG93RGVzY2VuZGFudC0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQp
OwotICAgIHJldHVybiBzcGVjaWZpZXJzOwogfQogCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFy
c2VyOjpyZXdyaXRlU3BlY2lmaWVycyhDU1NQYXJzZXJTZWxlY3Rvciogc3BlY2lmaWVycywgQ1NT
UGFyc2VyU2VsZWN0b3IqIG5ld1NwZWNpZmllcikKK093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
Q1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVycyhPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNw
ZWNpZmllcnMsIE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV3U3BlY2lmaWVyKQogewogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAobmV3U3BlY2lmaWVyLT5pc0N1c3RvbVBzZXVk
b0VsZW1lbnQoKSB8fCBuZXdTcGVjaWZpZXItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ3VlKSB7CkBAIC0xMTkwNyw0NCArMTE3MzMsNTEgQEAgQ1NTUGFyc2VyU2VsZWN0b3Iq
IENTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmllcnMoQ1NTUGFyc2VyU2VsZWN0b3IqIHNwZWNpZmll
cnMsIEMKICAgICBpZiAobmV3U3BlY2lmaWVyLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewog
I2VuZGlmCiAgICAgICAgIC8vIFVua25vd24gcHNldWRvIGVsZW1lbnQgYWx3YXlzIGdvZXMgYXQg
dGhlIHRvcCBvZiBzZWxlY3RvciBjaGFpbi4KLSAgICAgICAgbmV3U3BlY2lmaWVyLT5hcHBlbmRU
YWdIaXN0b3J5KENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50LCBzaW5rRmxvYXRpbmdTZWxl
Y3RvcihzcGVjaWZpZXJzKSk7CisgICAgICAgIG5ld1NwZWNpZmllci0+YXBwZW5kVGFnSGlzdG9y
eShDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCwgc3BlY2lmaWVycy5yZWxlYXNlKCkpOwog
ICAgICAgICByZXR1cm4gbmV3U3BlY2lmaWVyOwogICAgIH0KICAgICBpZiAoc3BlY2lmaWVycy0+
aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsKICAgICAgICAgLy8gU3BlY2lmaWVycyBmb3IgdW5r
bm93biBwc2V1ZG8gZWxlbWVudCBnbyByaWdodCBiZWhpbmQgaXQgaW4gdGhlIGNoYWluLgotICAg
ICAgICBzcGVjaWZpZXJzLT5pbnNlcnRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
ciwgc2lua0Zsb2F0aW5nU2VsZWN0b3IobmV3U3BlY2lmaWVyKSwgQ1NTU2VsZWN0b3I6OlNoYWRv
d0Rlc2NlbmRhbnQpOworICAgICAgICBzcGVjaWZpZXJzLT5pbnNlcnRUYWdIaXN0b3J5KENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvciwgbmV3U3BlY2lmaWVyLnJlbGVhc2UoKSwgQ1NTU2VsZWN0b3I6
OlNoYWRvd0Rlc2NlbmRhbnQpOwogICAgICAgICByZXR1cm4gc3BlY2lmaWVyczsKICAgICB9Ci0g
ICAgc3BlY2lmaWVycy0+YXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3Is
IHNpbmtGbG9hdGluZ1NlbGVjdG9yKG5ld1NwZWNpZmllcikpOworICAgIHNwZWNpZmllcnMtPmFw
cGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yLCBuZXdTcGVjaWZpZXIucmVs
ZWFzZSgpKTsKICAgICByZXR1cm4gc3BlY2lmaWVyczsKIH0KIAotU3R5bGVSdWxlQmFzZSogQ1NT
UGFyc2VyOjpjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdl
U2VsZWN0b3IpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlUGFn
ZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKQogewogICAg
IC8vIEZJWE1FOiBNYXJnaW4gYXQtcnVsZXMgYXJlIGlnbm9yZWQuCiAgICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFN0eWxl
UnVsZVBhZ2UqIHBhZ2VSdWxlID0gMDsKKyAgICBSZWZQdHI8U3R5bGVSdWxlUGFnZT4gcnVsZTsK
ICAgICBpZiAocGFnZVNlbGVjdG9yKSB7Ci0gICAgICAgIFJlZlB0cjxTdHlsZVJ1bGVQYWdlPiBy
dWxlID0gU3R5bGVSdWxlUGFnZTo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7Ci0g
ICAgICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2VsZWN0b3JWZWN0b3I7
CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVQYWdlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
eVNldCgpKTsKKyAgICAgICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+IHNlbGVj
dG9yVmVjdG9yOwogICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBlbmQocGFnZVNlbGVjdG9yKTsK
ICAgICAgICAgcnVsZS0+cGFyc2VyQWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rvcik7
Ci0gICAgICAgIHBhZ2VSdWxlID0gcnVsZS5nZXQoKTsKLSAgICAgICAgbV9wYXJzZWRSdWxlcy5h
cHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291
cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBvcFJ1bGVEYXRhKCk7CiAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHBhZ2VSdWxlOworICAgIHJldHVybiBy
dWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OnNldFJldXNhYmxlUmVnaW9uU2Vs
ZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3Jz
KQorT3duUHRyPFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gQ1NTUGFyc2VyOjpj
cmVhdGVTZWxlY3RvclZlY3RvcigpCiB7Ci0gICAgaWYgKHNlbGVjdG9ycykKLSAgICAgICAgbV9y
ZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yLnN3YXAoKnNlbGVjdG9ycyk7CisgICAgaWYgKG1f
cmVjeWNsZWRTZWxlY3RvclZlY3RvcikgeworICAgICAgICBtX3JlY3ljbGVkU2VsZWN0b3JWZWN0
b3ItPnNocmluaygwKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShtX3JlY3ljbGVkU2VsZWN0
b3JWZWN0b3IpOworICAgIH0KKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+Pik7CiB9CiAKLVN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3Jl
YXRlUmVnaW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiByZWdpb25T
ZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKQordm9pZCBDU1NQYXJzZXI6OnJlY3ljbGVTZWxlY3Rv
clZlY3RvcihPd25QdHI8VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiB2ZWN0b3Ip
Cit7CisgICAgaWYgKHZlY3RvciAmJiAhbV9yZWN5Y2xlZFNlbGVjdG9yVmVjdG9yKQorICAgICAg
ICBtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3IgPSBzdGQ6Om1vdmUodmVjdG9yKTsKK30KKworUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1
bGVzKQogewogICAgIGlmICghY3NzUmVnaW9uc0VuYWJsZWQoKSB8fCAhcmVnaW9uU2VsZWN0b3Ig
fHwgIXJ1bGVzKSB7CiAgICAgICAgIHBvcFJ1bGVEYXRhKCk7CkBAIC0xMTk1NSwxNSArMTE3ODgs
MTMgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKFZlY3RvcjxP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHIKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVSZWdp
b24+IHJlZ2lvblJ1bGUgPSBTdHlsZVJ1bGVSZWdpb246OmNyZWF0ZShyZWdpb25TZWxlY3Rvciwg
KnJ1bGVzKTsKIAotICAgIFN0eWxlUnVsZVJlZ2lvbiogcmVzdWx0ID0gcmVnaW9uUnVsZS5nZXQo
KTsKLSAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChyZWdpb25SdWxlLnJlbGVhc2UoKSk7CiAgICAg
aWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgYWRkTmV3UnVsZVRvU291cmNl
VHJlZShDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlZ2lvblJ1bGUucmVsZWFzZSgpOwogfQogCi1TdHlsZVJ1bGVC
YXNlKiBDU1NQYXJzZXI6OmNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94
VHlwZSAvKiBtYXJnaW5Cb3ggKi8pCit2b2lkIENTU1BhcnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxl
KENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlIC8qIG1hcmdpbkJveCAqLykKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IG1hcmdpbiBhdC1ydWxlIGhlcmUsIHVzaW5nOgogICAgIC8vICAgICAg
ICAtIG1hcmdpbkJveDogbWFyZ2luIGJveApAQCAtMTE5NzEsNyArMTE4MDIsNiBAQCBTdHlsZVJ1
bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2lu
Qm94VHlwZSAvKiBtYXJnaQogICAgIC8vIERvbid0IGZvcmdldCB0byBhbHNvIHVwZGF0ZSB0aGUg
YWN0aW9uIGZvciBwYWdlIHN5bWJvbCBpbiBDU1NHcmFtbWFyLnkgc3VjaCB0aGF0IG1hcmdpbiBh
dC1ydWxlIGRhdGEgaXMgY2xlYXJlZCBpZiBwYWdlX3NlbGVjdG9yIGlzIGludmFsaWQuCiAKICAg
ICBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKLSAgICByZXR1cm4gMDsgLy8gdW50aWwg
dGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQuCiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpzdGFydERl
Y2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpCkBAIC0xMTk5OCwyMSArMTE4MjgsMjEgQEAgdm9pZCBD
U1NQYXJzZXI6OmRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpCiAgICAgfQogfQogCi1TdHlsZUtl
eWZyYW1lKiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lKENTU1BhcnNlclZhbHVlTGlzdCoga2V5
cykKK1Bhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZShD
U1NQYXJzZXJWYWx1ZUxpc3QmIGtleXMpCiB7CiAgICAgLy8gQ3JlYXRlIGEga2V5IHN0cmluZyBm
cm9tIHRoZSBwYXNzZWQga2V5cwogICAgIFN0cmluZ0J1aWxkZXIga2V5U3RyaW5nOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLT5zaXplKCk7ICsraSkgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEp1c3QgYXMg
cGVyIHRoZSBjb21tZW50IGJlbG93LCB3ZSBpZ25vcmUga2V5ZnJhbWVzIHdpdGgKICAgICAgICAg
Ly8gaW52YWxpZCBrZXkgdmFsdWVzIChwbGFpbiBudW1iZXJzIG9yIHVua25vd24gaWRlbnRpZmll
cnMpCiAgICAgICAgIC8vIG1hcmtlZCBhcyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04g
ZHVyaW5nIHBhcnNpbmcuCi0gICAgICAgIGlmIChrZXlzLT52YWx1ZUF0KGkpLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgeworICAgICAgICBpZiAoa2V5cy52YWx1ZUF0
KGkpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgewogICAgICAgICAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQog
Ci0gICAgICAgIEFTU0VSVChrZXlzLT52YWx1ZUF0KGkpLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgZmxvYXQga2V5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGtleXMtPnZhbHVlQXQoaSktPmZWYWx1ZSk7CisgICAgICAgIEFTU0VSVChrZXlzLnZhbHVlQXQo
aSktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICBmbG9h
dCBrZXkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oa2V5cy52YWx1ZUF0KGkpLT5mVmFsdWUpOwogICAg
ICAgICBpZiAoa2V5IDwgMCB8fCBrZXkgPiAxMDApIHsKICAgICAgICAgICAgIC8vIEFzIHBlciBo
dHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI2tleWZyYW1lcywKICAgICAgICAg
ICAgIC8vICJJZiBhIGtleWZyYW1lIHNlbGVjdG9yIHNwZWNpZmllcyBuZWdhdGl2ZSBwZXJjZW50
YWdlIHZhbHVlcwpAQCAtMTIwMzEsOSArMTE4NjEsNyBAQCBTdHlsZUtleWZyYW1lKiBDU1NQYXJz
ZXI6OmNyZWF0ZUtleWZyYW1lKENTU1BhcnNlclZhbHVlTGlzdCoga2V5cykKIAogICAgIGNsZWFy
UHJvcGVydGllcygpOwogCi0gICAgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWVQdHIgPSBrZXlmcmFt
ZS5nZXQoKTsKLSAgICBtX3BhcnNlZEtleWZyYW1lcy5hcHBlbmQoa2V5ZnJhbWUucmVsZWFzZSgp
KTsKLSAgICByZXR1cm4ga2V5ZnJhbWVQdHI7CisgICAgcmV0dXJuIGtleWZyYW1lLnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OmludmFsaWRCbG9ja0hpdCgpCkBAIC0xMjI0MSwxOCAr
MTIwNjksMTYgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0
YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKIH0KIAogI2lmIEVOQUJMRShDU1NfREVW
SUNFX0FEQVBUQVRJT04pCi1TdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVZpZXdwb3J0
UnVsZSgpCitQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3Bv
cnRSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVj
bGFyYXRpb25zID0gZmFsc2U7CiAKICAgICBSZWZQdHI8U3R5bGVSdWxlVmlld3BvcnQ+IHJ1bGUg
PSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CiAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAKLSAgICBTdHlsZVJ1bGVWaWV3cG9ydCogcmVzdWx0ID0g
cnVsZS5nZXQoKTsKLSAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAg
ICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogCi0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDYwMGQ4NDNiNGI2NmM2YzBjNzk0YWQw
MzczN2MzOGE5ZjA5ZDBmMmEuLjkxMDZlMTZmYjgwNTU3NjMwOTdiZTE4NDA5ZjdjNmE2NzMxNGRk
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTE3NSwxMSArMTc1LDExIEBAIHB1YmxpYzoK
ICAgICBib29sIHBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsK
IAogICAgIGJvb2wgcGFyc2VCYXNpY1NoYXBlKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVJlY3Rhbmds
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MpOwotICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFw
ZT4gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCogYXJncyk7Ci0gICAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJhc2ljU2hhcGVFbGxpcHNlKENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyk7Ci0gICAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJh
c2ljU2hhcGVQb2x5Z29uKENTU1BhcnNlclZhbHVlTGlzdCogYXJncyk7Ci0gICAgUGFzc1JlZlB0
cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZShDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MpOworICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VCYXNp
Y1NoYXBlUmVjdGFuZ2xlKENTU1BhcnNlclZhbHVlTGlzdCopOworICAgIFBhc3NSZWZQdHI8Q1NT
QmFzaWNTaGFwZT4gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCopOwor
ICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZShDU1NQ
YXJzZXJWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFz
aWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxDU1NC
YXNpY1NoYXBlPiBwYXJzZUJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZShDU1NQYXJzZXJWYWx1ZUxp
c3QqKTsKIAogICAgIGJvb2wgcGFyc2VGb250KGJvb2wgaW1wb3J0YW50KTsKICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFtaWx5KCk7CkBAIC0yODIsNyArMjgyLDcgQEAg
cHVibGljOgogICAgIGJvb2wgcGFyc2VUZXh0RGVjb3JhdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCiAgICAgYm9vbCBwYXJz
ZVRleHRVbmRlcmxpbmVQb3NpdGlvbihib29sIGltcG9ydGFudCk7Ci0jZW5kaWYgLy8gQ1NTM19U
RVhUCisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVGV4dEluZGVudCgp
OwogICAgIApAQCAtMzAwLDc2ICszMDAsNDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYXJzZUZv
bnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50KTsKIAotICAgIENTU1BhcnNlclNlbGVj
dG9yKiBjcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7Ci0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGNy
ZWF0ZUZsb2F0aW5nU2VsZWN0b3JXaXRoVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0g
ICAgUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NT
UGFyc2VyU2VsZWN0b3IqKTsKLQotICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID4qIGNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JWZWN0b3IoKTsKLSAgICBQYXNzT3duUHRyPFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gPiBzaW5rRmxvYXRpbmdTZWxlY3RvclZlY3Rv
cihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+Kik7Ci0KLSAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGNyZWF0ZUZsb2F0aW5nVmFsdWVMaXN0KCk7Ci0gICAgUGFzc093blB0cjxDU1NQ
YXJzZXJWYWx1ZUxpc3Q+IHNpbmtGbG9hdGluZ1ZhbHVlTGlzdChDU1NQYXJzZXJWYWx1ZUxpc3Qq
KTsKLQotICAgIENTU1BhcnNlckZ1bmN0aW9uKiBjcmVhdGVGbG9hdGluZ0Z1bmN0aW9uKCk7Ci0g
ICAgUGFzc093blB0cjxDU1NQYXJzZXJGdW5jdGlvbj4gc2lua0Zsb2F0aW5nRnVuY3Rpb24oQ1NT
UGFyc2VyRnVuY3Rpb24qKTsKLQotICAgIENTU1BhcnNlclZhbHVlJiBzaW5rRmxvYXRpbmdWYWx1
ZShDU1NQYXJzZXJWYWx1ZSYpOwotCi0gICAgTWVkaWFRdWVyeVNldCogY3JlYXRlTWVkaWFRdWVy
eVNldCgpOwotICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiwgTWVkaWFRdWVyeVNldCopOwotICAgIFN0eWxlS2V5ZnJhbWUqIGNyZWF0ZUtl
eWZyYW1lKENTU1BhcnNlclZhbHVlTGlzdCopOwotICAgIFN0eWxlUnVsZUtleWZyYW1lcyogY3Jl
YXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRyPFZlY3RvcjxSZWZQdHI8
U3R5bGVLZXlmcmFtZT4gPiA+KTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPiA+IFJ1bGVMaXN0OwotICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1lZGlhUnVsZShN
ZWRpYVF1ZXJ5U2V0KiwgUnVsZUxpc3QqKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVFbXB0
eU1lZGlhUnVsZShSdWxlTGlzdCopOwotICAgIFJ1bGVMaXN0KiBjcmVhdGVSdWxlTGlzdCgpOwot
ICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNl
clNlbGVjdG9yPiA+KiBzZWxlY3RvcnMpOwotICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUZvbnRG
YWNlUnVsZSgpOwotICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7Ci0gICAgU3R5bGVSdWxlQmFzZSogY3Jl
YXRlUmVnaW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiByZWdpb25T
ZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJn
aW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOworICAgIC8vIEZhc3RlciB0aGFu
IGRvaW5nIGEgbmV3L2RlbGV0ZSBlYWNoIHRpbWUgc2luY2UgaXQga2VlcHMgb25lIHZlY3Rvci4K
KyAgICBPd25QdHI8VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBjcmVhdGVTZWxl
Y3RvclZlY3RvcigpOworICAgIHZvaWQgcmVjeWNsZVNlbGVjdG9yVmVjdG9yKE93blB0cjxWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPj4+KTsKKworICAgIFBhc3NSZWZQdHI8U3R5bGVS
dWxlQmFzZT4gY3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmLCBQYXNzUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+KTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IGNyZWF0
ZUtleWZyYW1lKENTU1BhcnNlclZhbHVlTGlzdCYpOworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPiBjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8
VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+KTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPj4gUnVsZUxpc3Q7CisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBjcmVhdGVNZWRpYVJ1bGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgUnVsZUxpc3Qq
KTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZUVtcHR5TWVkaWFSdWxlKFJ1
bGVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjcmVhdGVTdHlsZVJ1bGUo
VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiBzZWxlY3RvcnMpOworICAgIFBhc3NS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlRm9udEZhY2VSdWxlKCk7CisgICAgUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiBwYWdlU2VsZWN0b3IpOworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRl
UmVnaW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHJlZ2lvblNlbGVj
dG9yLCBSdWxlTGlzdCogcnVsZXMpOworICAgIHZvaWQgY3JlYXRlTWFyZ2luQXRSdWxlKENTU1Nl
bGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKICNpZiBFTkFCTEUoQ1NTM19DT05ESVRJT05BTF9SVUxF
UykKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVTdXBwb3J0c1J1bGUoYm9vbCBjb25kaXRpb25J
c1N1cHBvcnRlZCwgUnVsZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNy
ZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9ydGVkLCBSdWxlTGlzdCopOwog
ICAgIHZvaWQgbWFya1N1cHBvcnRzUnVsZUhlYWRlclN0YXJ0KCk7CiAgICAgdm9pZCBtYXJrU3Vw
cG9ydHNSdWxlSGVhZGVyRW5kKCk7CiAgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
cG9wU3VwcG9ydHNSdWxlRGF0YSgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0g
ICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKTsKKyAgICBQ
YXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0Kik7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlRmls
dGVyUnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVs
ZUJhc2U+IGNyZWF0ZUZpbHRlclJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7CiAjZW5kaWYK
IAogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVu
ZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCi0gICAgTWVkaWFRdWVyeUV4cCogY3JlYXRl
RmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1BhcnNlclZhbHVl
TGlzdCopOwotICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeUV4cD4gc2lua0Zsb2F0aW5nTWVkaWFR
dWVyeUV4cChNZWRpYVF1ZXJ5RXhwKik7Ci0gICAgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhw
PiA+KiBjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KCk7Ci0gICAgUGFzc093blB0cjxW
ZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gPiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhw
TGlzdChWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4qKTsKLSAgICBNZWRpYVF1ZXJ5KiBj
cmVhdGVGbG9hdGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeTo6UmVzdHJpY3RvciwgY29uc3QgU3Ry
aW5nJiwgUGFzc093blB0cjxWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gPik7Ci0gICAg
TWVkaWFRdWVyeSogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KFBhc3NPd25QdHI8VmVjdG9yPE93
blB0cjxNZWRpYVF1ZXJ5RXhwPiA+ID4pOwotICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeT4gc2lu
a0Zsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5Kik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFN0
eWxlS2V5ZnJhbWU+ID4qIGNyZWF0ZUZsb2F0aW5nS2V5ZnJhbWVWZWN0b3IoKTsKLSAgICBQYXNz
T3duUHRyPFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiA+IHNpbmtGbG9hdGluZ0tleWZy
YW1lVmVjdG9yKFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiopOwotCiAgICAgdm9pZCBh
ZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdXJpKTsKICAgICBRdWFsaWZpZWROYW1lIGRldGVybWluZU5hbWVJbk5hbWVzcGFjZShjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwog
Ci0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHJld3JpdGVTcGVjaWZpZXJzV2l0aEVsZW1lbnROYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlUHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcm
IGVsZW1lbnROYW1lLCBDU1NQYXJzZXJTZWxlY3RvciosIGJvb2wgaXNOYW1lc3BhY2VQbGFjZWhv
bGRlciA9IGZhbHNlKTsKLSAgICBDU1NQYXJzZXJTZWxlY3RvciogcmV3cml0ZVNwZWNpZmllcnNX
aXRoTmFtZXNwYWNlSWZOZWVkZWQoQ1NTUGFyc2VyU2VsZWN0b3IqKTsKLSAgICBDU1NQYXJzZXJT
ZWxlY3RvciogcmV3cml0ZVNwZWNpZmllcnMoQ1NTUGFyc2VyU2VsZWN0b3IqLCBDU1NQYXJzZXJT
ZWxlY3RvciopOworICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgZWxl
bWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJiwgYm9vbCBpc05hbWVzcGFjZVBsYWNlaG9sZGVy
ID0gZmFsc2UpOworICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoTmFtZXNwYWNlSWZOZWVk
ZWQoQ1NTUGFyc2VyU2VsZWN0b3ImKTsKKyAgICBPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHJl
d3JpdGVTcGVjaWZpZXJzKE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4sIE93blB0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4pOwogCiAgICAgdm9pZCBpbnZhbGlkQmxvY2tIaXQoKTsKIAotICAgIFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHJldXNhYmxlU2VsZWN0b3JWZWN0b3IoKSB7
IHJldHVybiAmbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yOyB9Ci0KLSAgICB2b2lkIHNldFJldXNh
YmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
Piogc2VsZWN0b3JzKTsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBy
ZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2FibGVSZWdpb25T
ZWxlY3RvclZlY3RvcjsgfQotCiAgICAgdm9pZCB1cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9z
aXRpb24oKTsKICAgICB2b2lkIHVwZGF0ZUxhc3RNZWRpYUxpbmUoTWVkaWFRdWVyeVNldCopOwog
CkBAIC00NDIsNyArNDEzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxlQm9keVN0YXJ0KCkgeyBtX2luVmlld3Bv
cnQgPSB0cnVlOyB9CiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxlQm9keUVuZCgpIHsgbV9pblZp
ZXdwb3J0ID0gZmFsc2U7IH0KLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVWaWV3cG9ydFJ1bGUo
KTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZVZpZXdwb3J0UnVsZSgpOwog
I2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWUqKTsKQEAgLTYxMywyMyArNTg0LDcgQEAgcHJp
dmF0ZToKIAogICAgIGludCAoQ1NTUGFyc2VyOjoqbV9sZXhGdW5jKSh2b2lkKik7CiAKLSAgICBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4gbV9wYXJzZWRSdWxlczsKLSAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4gbV9wYXJzZWRLZXlmcmFtZXM7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiA+IG1fcGFyc2VkTWVkaWFRdWVyeVNldHM7Ci0gICAgVmVjdG9y
PE93blB0cjxSdWxlTGlzdD4gPiBtX3BhcnNlZFJ1bGVMaXN0czsKLSAgICBIYXNoU2V0PENTU1Bh
cnNlclNlbGVjdG9yKj4gbV9mbG9hdGluZ1NlbGVjdG9yczsKLSAgICBIYXNoU2V0PFZlY3RvcjxP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qPiBtX2Zsb2F0aW5nU2VsZWN0b3JWZWN0b3JzOwot
ICAgIEhhc2hTZXQ8Q1NTUGFyc2VyVmFsdWVMaXN0Kj4gbV9mbG9hdGluZ1ZhbHVlTGlzdHM7Ci0g
ICAgSGFzaFNldDxDU1NQYXJzZXJGdW5jdGlvbio+IG1fZmxvYXRpbmdGdW5jdGlvbnM7Ci0KLSAg
ICBPd25QdHI8TWVkaWFRdWVyeT4gbV9mbG9hdGluZ01lZGlhUXVlcnk7Ci0gICAgT3duUHRyPE1l
ZGlhUXVlcnlFeHA+IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwOwotICAgIE93blB0cjxWZWN0b3I8
T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gPiBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3Q7Ci0K
LSAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+ID4gbV9mbG9hdGluZ0tl
eWZyYW1lVmVjdG9yOwotCi0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBt
X3JldXNhYmxlU2VsZWN0b3JWZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4gPiBtX3JldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3I7CisgICAgT3duUHRyPFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gbV9yZWN5Y2xlZFNlbGVjdG9yVmVjdG9yOwog
CiAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9wYXJzZWRDYWxjdWxhdGlvbjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAppbmRleCA3ZGYxMGVmNWY0ODMxODM4NThiNzIw
Mzg0MmNmMWZiY2ViZTBiYTk3Li4wMDdjMDU5ZGYxODNiZjk5NGQ2NjZiMmFhMDE5YjJhZDMwMDAy
ZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcApAQCAtMzMsMTMgKzMz
LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAordm9p
ZCBkZXN0cm95KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisgICAgICAgIGRlbGV0ZSB2YWx1ZS5m
dW5jdGlvbjsKK30KKwogQ1NTUGFyc2VyVmFsdWVMaXN0Ojp+Q1NTUGFyc2VyVmFsdWVMaXN0KCkK
IHsKLSAgICBzaXplX3QgbnVtVmFsdWVzID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHsKLSAgICAgICAgaWYgKG1fdmFsdWVzW2ld
LnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICAgICAgZGVsZXRlIG1f
dmFsdWVzW2ldLmZ1bmN0aW9uOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9
IG1fdmFsdWVzLnNpemUoKTsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgZGVzdHJveShtX3ZhbHVl
c1tpXSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0OjphZGRWYWx1ZShjb25zdCBDU1NQ
YXJzZXJWYWx1ZSYgdikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJW
YWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAppbmRleCBmMjhi
OGY1MzQ5MjQwZTM1MDY4MTI0NzRmNWVmYTkxMGJkZDkwNTVjLi5mMzE5MmZlNDBiZmU3Zjc2ZjA3
YjhiN2RkNmJjMmI0MGY5ZWQ0ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5o
CkBAIC0xMjUsMTAgKzEyNSwxMSBAQCBzdHJ1Y3QgQ1NTUGFyc2VyVmFsdWUgewogICAgIH07CiAg
ICAgaW50IHVuaXQ7CiAKLQogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNyZWF0ZUNTU1ZhbHVl
KCk7CiB9OwogCit2b2lkIGRlc3Ryb3koY29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKKwogY2xhc3Mg
Q1NTUGFyc2VyVmFsdWVMaXN0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoK
</data>

          </attachment>
      

    </bug>

</bugzilla>