<?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>76861</bug_id>
          
          <creation_ts>2012-01-23 14:13:48 -0800</creation_ts>
          <short_desc>JSValue::toString() should return a JSString* instead of a UString</short_desc>
          <delta_ts>2012-01-25 00:05:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540829</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 14:13:48 -0800</bug_when>
    <thetext>JSValue::toString() should return a JSString* instead of a UString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540848</commentid>
    <comment_count>1</comment_count>
      <attachid>123624</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 14:38:10 -0800</bug_when>
    <thetext>Created attachment 123624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540850</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 14:39:46 -0800</bug_when>
    <thetext>Seems performance-neutral:

Benchmark report for SunSpider, V8, and Kraken on garen (MacPro5,1).

VMs tested:
&quot;BASELINE&quot; at /Volumes/Big/ggaren/baseline-webkit/WebKitBuild/Release/jsc (r104476)
&quot;PATCH&quot; at /Volumes/Big/ggaren/webkit/WebKitBuild/Release/jsc (r105540)

Collected 24 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                             BASELINE                 PATCH                                      
SunSpider:
   3d-cube                                6.6110+-0.0354    ?     6.6801+-0.0353       ? might be 1.0104x slower
   3d-morph                              10.3602+-0.0463         10.3560+-0.0460       
   3d-raytrace                            8.7381+-0.0234    !     8.8391+-0.0526       ! definitely 1.0116x slower
   access-binary-trees                    1.8818+-0.0097    ?     1.8820+-0.0115       ?
   access-fannkuch                        9.0918+-0.0154    !     9.4960+-0.0081       ! definitely 1.0445x slower
   access-nbody                           4.6114+-0.0194          4.5918+-0.0121       
   access-nsieve                          4.0541+-0.0623          3.9881+-0.0236         might be 1.0165x faster
   bitops-3bit-bits-in-byte               1.4689+-0.0064          1.4661+-0.0016       
   bitops-bits-in-byte                    6.0210+-0.0231    ?     6.0327+-0.0146       ?
   bitops-bitwise-and                     3.8085+-0.0220          3.7922+-0.0066       
   bitops-nsieve-bits                     6.5441+-0.0275    ?     6.5810+-0.0313       ?
   controlflow-recursive                  2.7080+-0.0083          2.7039+-0.0075       
   crypto-aes                             8.3035+-0.0603          8.2565+-0.0427       
   crypto-md5                             2.9664+-0.0225          2.9416+-0.0217       
   crypto-sha1                            2.6637+-0.0277          2.6326+-0.0139         might be 1.0118x faster
   date-format-tofte                     11.8221+-0.0504         11.7626+-0.0614       
   date-format-xparb                     11.0695+-0.1334    !    11.4676+-0.0735       ! definitely 1.0360x slower
   math-cordic                            8.3628+-0.0210    ?     8.4903+-0.1125       ? might be 1.0153x slower
   math-partial-sums                     12.0228+-0.0349         12.0026+-0.0230       
   math-spectral-norm                     3.0567+-0.0046          3.0542+-0.0032       
   regexp-dna                            10.0438+-0.0567         10.0245+-0.0550       
   string-base64                          5.0494+-0.0270    !     5.1369+-0.0312       ! definitely 1.0173x slower
   string-fasta                           8.3458+-0.0318    ^     8.1463+-0.0230       ^ definitely 1.0245x faster
   string-tagcloud                       14.6002+-0.0521    ^    14.4003+-0.0540       ^ definitely 1.0139x faster
   string-unpack-code                    23.3418+-0.0767    ?    23.4400+-0.0713       ?
   string-validate-input                  6.7119+-0.0397          6.6901+-0.0234       

   &lt;arithmetic&gt; *                         7.4715+-0.0170    ?     7.4944+-0.0155       ? might be 1.0031x slower
   &lt;geometric&gt;                            6.1247+-0.0122    ?     6.1343+-0.0118       ? might be 1.0016x slower
   &lt;harmonic&gt;                             4.8916+-0.0094          4.8883+-0.0098         might be 1.0007x faster

                                             BASELINE                 PATCH                                      
V8:
   crypto                                89.5955+-0.1737         89.5781+-0.1318       
   deltablue                            194.0910+-1.7153        192.3804+-1.3365       
   earley-boyer                         108.7625+-1.5667        108.4443+-1.6310       
   raytrace                              60.7802+-0.2804         60.5074+-0.2504       
   regexp                               111.5169+-0.2266    ?   111.6835+-0.2607       ?
   richards                             156.0449+-0.1767    ?   156.2165+-0.1462       ?
   splay                                 85.0744+-1.2860         83.9436+-0.2382         might be 1.0135x faster

   &lt;arithmetic&gt;                         115.1236+-0.5042        114.6791+-0.3207         might be 1.0039x faster
   &lt;geometric&gt; *                        107.8749+-0.4574        107.4618+-0.2753         might be 1.0038x faster
   &lt;harmonic&gt;                           101.2839+-0.4243        100.8785+-0.2366         might be 1.0040x faster

                                             BASELINE                 PATCH                                      
Kraken:
   ai-astar                             947.2241+-0.8833        946.5622+-0.8812       
   audio-beat-detection                 222.4434+-0.4525    ?   222.5369+-0.4888       ?
   audio-dft                            326.8621+-3.3635        324.7562+-0.3348       
   audio-fft                            138.5094+-0.0789        138.5020+-0.1028       
   audio-oscillator                     352.7950+-2.6635        350.4292+-1.9507       
   imaging-darkroom                     338.9531+-4.8759        337.4513+-5.7336       
   imaging-desaturate                   265.1648+-0.0966    ?   265.6183+-0.3809       ?
   imaging-gaussian-blur                604.0797+-3.2211        601.5251+-2.0723       
   json-parse-financial                  78.4658+-0.1491    ^    78.0021+-0.1352       ^ definitely 1.0059x faster
   json-stringify-tinderbox              93.6828+-0.3702    ^    92.8008+-0.2356       ^ definitely 1.0095x faster
   stanford-crypto-aes                  120.4857+-0.2230    !   121.7085+-0.3545       ! definitely 1.0101x slower
   stanford-crypto-ccm                  119.6886+-1.0952        118.8119+-0.8683       
   stanford-crypto-pbkdf2               228.5304+-0.8767    ^   226.2212+-0.4595       ^ definitely 1.0102x faster
   stanford-crypto-sha256-iterative     103.8256+-0.0686    !   104.7056+-0.2849       ! definitely 1.0085x slower

   &lt;arithmetic&gt; *                       281.4793+-0.5644        280.6880+-0.4083         might be 1.0028x faster
   &lt;geometric&gt;                          215.2715+-0.3574        214.7396+-0.2655         might be 1.0025x faster
   &lt;harmonic&gt;                           172.5559+-0.2388        172.1969+-0.1845         might be 1.0021x faster

                                             BASELINE                 PATCH                                      
All benchmarks:
   &lt;arithmetic&gt;                         105.1242+-0.2135        104.8349+-0.1529         might be 1.0028x faster
   &lt;geometric&gt;                           27.1091+-0.0520         27.0970+-0.0454         might be 1.0004x faster
   &lt;harmonic&gt;                             8.5994+-0.0164          8.5931+-0.0170         might be 1.0007x faster

                                             BASELINE                 PATCH                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                       60.9894+-0.1397         60.9169+-0.1087         might be 1.0012x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540864</commentid>
    <comment_count>3</comment_count>
      <attachid>123624</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 14:48:44 -0800</bug_when>
    <thetext>Comment on attachment 123624
Patch

-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec)-&gt;value(exec).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540869</commentid>
    <comment_count>4</comment_count>
      <attachid>123624</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-23 14:59:49 -0800</bug_when>
    <thetext>Comment on attachment 123624
Patch

Attachment 123624 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11117534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540882</commentid>
    <comment_count>5</comment_count>
      <attachid>123634</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 15:25:18 -0800</bug_when>
    <thetext>Created attachment 123634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540914</commentid>
    <comment_count>6</comment_count>
      <attachid>123644</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 15:56:04 -0800</bug_when>
    <thetext>Created attachment 123644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540943</commentid>
    <comment_count>7</comment_count>
      <attachid>123649</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 16:22:40 -0800</bug_when>
    <thetext>Created attachment 123649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540981</commentid>
    <comment_count>8</comment_count>
      <attachid>123662</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 16:51:46 -0800</bug_when>
    <thetext>Created attachment 123662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541021</commentid>
    <comment_count>9</comment_count>
      <attachid>123671</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 17:23:51 -0800</bug_when>
    <thetext>Created attachment 123671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541069</commentid>
    <comment_count>10</comment_count>
      <attachid>123671</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-23 18:38:37 -0800</bug_when>
    <thetext>Comment on attachment 123671
Patch

Attachment 123671 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11117611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541117</commentid>
    <comment_count>11</comment_count>
      <attachid>123695</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 21:26:29 -0800</bug_when>
    <thetext>Created attachment 123695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541146</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 23:34:20 -0800</bug_when>
    <thetext>Committed r105698: &lt;http://trac.webkit.org/changeset/105698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541156</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-24 00:06:54 -0800</bug_when>
    <thetext>Reopen, because it broke 2 tests at least on Qt:

--- /ramdisk/qt-linux-64-release-quicktest/build/layout-test-results/fast/js/array-functions-non-arrays-expected.txt 
+++ /ramdisk/qt-linux-64-release-quicktest/build/layout-test-results/fast/js/array-functions-non-arrays-actual.txt 
@@ -57,9 +57,9 @@
 PASS Array.prototype.slice.call(new TwoItemConstructor, 0, 1) is [&apos;b&apos;]
 PASS properties(Array.prototype.sort.call({})) is &apos;&apos;
 PASS properties(Array.prototype.sort.call([&apos;b&apos;, &apos;a&apos;])) is &apos;0:a, 1:b, length:2(DontDelete, DontEnum)&apos;
-PASS properties(Array.prototype.sort.call({ length:2, 0:&apos;b&apos;, 1:&apos;a&apos; })) is &apos;0:a, 1:b, length:2&apos;
+FAIL properties(Array.prototype.sort.call({ length:2, 0:&apos;b&apos;, 1:&apos;a&apos; })) should be 0:a, 1:b, length:2. Was 0:b, 1:a, length:2.
 PASS properties(Array.prototype.sort.call(new OneItemConstructor)) is &apos;0:a(FromPrototype), length:1(FromPrototype)&apos;
-PASS properties(Array.prototype.sort.call(new TwoItemConstructor)) is &apos;0:a, 1:b, length:2(FromPrototype)&apos;
+FAIL properties(Array.prototype.sort.call(new TwoItemConstructor)) should be 0:a, 1:b, length:2(FromPrototype). Was 0:b(FromPrototype), 1:a(FromPrototype), length:2(FromPrototype).
 PASS Array.prototype.splice.call({}, 0, 1) is []
 PASS Array.prototype.splice.call([&apos;b&apos;, &apos;a&apos;], 0, 1) is [&apos;b&apos;]
 PASS Array.prototype.splice.call({ length:2, 0:&apos;b&apos;, 1:&apos;a&apos; }, 0, 1) is [&apos;b&apos;]


--- /ramdisk/qt-linux-64-release-quicktest/build/layout-test-results/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T1-expected.txt 
+++ /ramdisk/qt-linux-64-release-quicktest/build/layout-test-results/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T1-actual.txt 
@@ -1,6 +1,6 @@
 S15.4.4.11_A3_T1
 
-PASS 
+FAIL SputnikError: #1: Check ToString operator
 
 TEST COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541160</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-24 00:31:56 -0800</bug_when>
    <thetext>These tests fail on SL too.

And this patch broke GTK build too:
../../Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp: In static member function ‘static void* WebCore::JSPeerConnectionConstructor::constructJSPeerConnection(JSC::ExecState*)’:
../../Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:51: error: invalid initialization of reference of type ‘const JSC::UString&amp;’ from expression of type ‘JSC::JSString*’
../../Source/WebCore/bindings/js/JSDOMBinding.h:322: error: in passing argument 1 of ‘WTF::String WebCore::ustringToString(const JSC::UString&amp;)’

And an interpreter buildfix landed in http://trac.webkit.org/changeset/105702</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541199</commentid>
    <comment_count>15</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-01-24 02:50:42 -0800</bug_when>
    <thetext>build fixes for Qt and Gtk:

http://trac.webkit.org/changeset/105713
http://trac.webkit.org/changeset/105703
http://trac.webkit.org/changeset/105702

please check that changes are fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541202</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-24 02:53:18 -0800</bug_when>
    <thetext>I skipped these tests on Qt: http://trac.webkit.org/changeset/105715
Please unskip them with the proper fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541486</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-24 11:01:34 -0800</bug_when>
    <thetext>&gt; build fixes for Qt and Gtk:

These are fine. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541595</commentid>
    <comment_count>18</comment_count>
      <attachid>123789</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-24 13:06:09 -0800</bug_when>
    <thetext>Created attachment 123789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541633</commentid>
    <comment_count>19</comment_count>
      <attachid>123789</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 13:43:01 -0800</bug_when>
    <thetext>Comment on attachment 123789
Patch

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

New failing tests:
media/audio-garbage-collect.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541703</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-24 14:31:47 -0800</bug_when>
    <thetext>Committed r105811: &lt;http://trac.webkit.org/changeset/105811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541706</commentid>
    <comment_count>21</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-24 14:37:34 -0800</bug_when>
    <thetext>Bindings test expectations fixed:

Committed r105813: &lt;http://trac.webkit.org/changeset/105813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542048</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-25 00:05:26 -0800</bug_when>
    <thetext>I unskipped the now passing tests - http://trac.webkit.org/changeset/105853</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123624</attachid>
            <date>2012-01-23 14:38:10 -0800</date>
            <delta_ts>2012-01-23 15:25:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123143809.patch</filename>
            <type>text/plain</type>
            <size>141978</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IGJ1aWxkIGFmdGVyIHIxMDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxMyArNTY3LDEzIEBAIF9f
Wk5LM0pTQzE5U291cmNlUHJvdmlkZXJDYWNoZThieXRlU2l6ZUUKIF9fWk5LM0pTQzZKU0NlbGwx
MXRvUHJpbWl0aXZlRVBOU185RXhlY1N0YXRlRU5TXzIyUHJlZmVycmVkUHJpbWl0aXZlVHlwZUUK
IF9fWk5LM0pTQzZKU0NlbGw4dG9OdW1iZXJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M2SlND
ZWxsOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RQotX19aTksz
SlNDNkpTQ2VsbDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0
U3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlF
eGVjU3RhdGVFUk5TXzdVU3RyaW5nRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8K
IF9fWk5LM0pTQzdKU0FycmF5MTJzdWJjbGFzc0RhdGFFdgogX19aTkszSlNDN0pTVmFsdWUxNnRv
TnVtYmVyU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9PYmpl
Y3RTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKK19fWk5LM0pT
QzdKU1ZhbHVlMTZ0b1N0cmluZ1Nsb3dDYXNlRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0pT
VmFsdWUxOXN5bnRoZXNpemVQcm90b3R5cGVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTIwdG9UaGlzT2JqZWN0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJpCiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwog
Ci0gICAgICAgIHByaW50ZigiJXMiLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBw
dXRjaGFyKCdcbicpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRlYnVnKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xu
IiwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudXRmOCgpLmRhdGEoKSk7CisgICAg
ZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBW
ZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7
CkBAIC0yOTQsNyArMjk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwpAQCAtMzEwLDcgKzMxMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBu
b3Qgb3BlbiBmaWxlLiIpKSk7CkBAIC00ODcsOSArNDg3LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0
aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGR1bXApIHsKICAgICAgICAgICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAl
c1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246
ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwg
cmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBnbG9i
YWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNTQ2LDkgKzU0Niw5IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBK
U1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2
YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52
YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVU
b1N0cmluZ0NvcHkoSlNDb250ZXgKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywg
dmFsdWUpOwogICAgIAotICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1
ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgIFJlZlB0cjxP
cGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDcgKzc4LDcgQEAgc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0cmluZyhFeGVjUwog
ICAgICAgICByZXR1cm4gIjAiOwogCiAgICAgaWYgKHZhbC5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNjYXBlUXVvdGVzKHZhbC50b1N0cmluZyhleGVjKSks
ICJcIiIpOworICAgICAgICByZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNjYXBlUXVvdGVzKHZh
bC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCAiXCIiKTsKIAogICAgIHJldHVybiB2YWwu
ZGVzY3JpcHRpb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiAKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9uLgotICAgIElkZW50
aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZp
ZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoIWdsb2JhbERhdGEtPmV4Y2VwdGlvbikgewogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChzdHJpY3QpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwg
c2xvdCk7CkBAIC0yNTksMTEgKzI1OSw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uVmEKICAgICAKICAgICBBU1NFUlQoIW9wMS5pc051bWJlcigpIHx8ICFvcDIuaXNO
dW1iZXIoKSk7CiAgICAgCi0gICAgaWYgKG9wMS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGlmIChv
cDIuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoZXhlYywgYXNTdHJpbmcob3AxKSwgYXNTdHJpbmcob3AyKSkpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSksIG9wMi50b1ByaW1p
dGl2ZVN0cmluZyhleGVjKSkpOwotICAgIH0KKyAgICBpZiAob3AxLmlzU3RyaW5nKCkgJiYgIW9w
Mi5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4
ZWMsIGFzU3RyaW5nKG9wMSksIG9wMi50b1N0cmluZyhleGVjKSkpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0FkZFNsb3dDYXNlKGV4ZWMsIG9wMSwgb3AyKSk7CiB9CkBAIC0zMDYs
NyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0
cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZh
bHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCkBAIC0zMjYsNyArMzIzLDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywg
cHJvcGVydHkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJv
cGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGlkZW50KSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMw
MywxMCArMTMwMyw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
ICAgICBKU1ZhbHVlIHYyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgaWYgKHYxLmlz
U3RyaW5nKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB2Mi5pc1N0cmluZygpCi0gICAg
ICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCBhc1N0cmluZyh2Mikp
Ci0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1By
aW1pdGl2ZVN0cmluZyhjYWxsRnJhbWUpKTsKKyAgICBpZiAodjEuaXNTdHJpbmcoKSAmJiAhdjIu
aXNPYmplY3QoKSkgeworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nKGNhbGxGcmFt
ZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogICAgIH0KQEAgLTI0NjEsNyArMjQ1OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogICAgIH0KICAgICAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vi
c2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwpAQCAtMjQ4OCw3ICsyNDg2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmlu
ZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1
YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAgICB9CiAgICAg
CkBAIC0yNTE4LDcgKzI1MTYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAgICAgICAgIGlmICghaXNKU0J5dGVBcnJheShiYXNlVmFsdWUpKQogICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsKSk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlw
dC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
ICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAg
ICB9CiAgICAgCkBAIC0yNTc5LDcgKzI1NzcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1
dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVy
IHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAg
ICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNh
bGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJp
bmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFz
ZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0yNjIwLDcg
KzI2MTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAg
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWwpKTsK
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3Ry
aW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwg
c3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAg
ICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0
byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2Rl
KCkpOwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1
ZSwgc2xvdCk7CkBAIC0zMzg2LDcgKzMzODQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiAgICAgaWYgKHByb3BOYW1lLmdldFVJbnQzMihpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2Fs
bEZyYW1lLCBpKSkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BO
YW1lLnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZy
YW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eSkpKTsKIH0KQEAg
LTM0OTgsNyArMzQ5Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KGJhc2VPYmosIGNhbGxGcmFtZSwgaSk7CiAgICAgZWxzZSB7CiAgICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJh
bWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICByZXN1
bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBjYWxs
RnJhbWUsIHByb3BlcnR5KTsKICAgICB9CkBAIC0zNTM5LDcgKzM1MzcsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF90aHJvd19yZWZlCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNh
bGxGcmFtZTsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgVVN0cmluZyBtZXNzYWdlID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLmpzVmFsdWUoKS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
OwogICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNl
RXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5E
KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlm
IChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCi0gICAgICAgIFVTdHJpbmcgc3RyID0gZWxlbWVudC50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgVVN0cmluZyBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAgICAgc3RyQnVmZmVyW2tdID0gc3RyLmltcGwoKTsKICAgICAgICAgdG90YWxTaXplICs9
IHN0ci5sZW5ndGgoKTsKICAgICAgICAgYWxsU3RyaW5nczhCaXQgPSBhbGxTdHJpbmdzOEJpdCAm
JiBzdHIuaXM4Qml0KCk7CkBAIC0yNzIsOSArMjcyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSkudG9TdHJpbmcoZXhl
Yyk7CisgICAgICAgICAgICAgICAgc3RyID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIHN0ciA9IGVsZW1l
bnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgc3RyQnVmZmVyLmFw
cGVuZChzdHIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjk3LDcgKzI5Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIFVTdHJpbmcgc2VwYXJhdG9y
OwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgc2Vw
YXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHNlcGFy
YXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAog
ICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikpIHsKQEAgLTMw
OCw3ICszMDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICAgICAgZ290byBza2lwRmlyc3RMb29wOwogICAgICAgICAgICAgSlNWYWx1ZSBl
bGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50Lmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVt
ZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVs
ZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGsrKzsKICAg
ICAgICAgfQogCkBAIC0zMTksNyArMzE5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoJywnKTsKICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewpAQCAtMzI4LDcgKzMyOCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgICAgICBzdHJCdWZm
ZXIuYXBwZW5kKHNlcGFyYXRvcik7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
YXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1l
bnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5k
KGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTM0Myw3ICszNDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGspOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKSk7Cisg
ICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0ckJ1ZmZlci5i
dWlsZChleGVjKSk7CkBAIC00MjksNyArNDI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggKyBuLCBleGVjLT5hcmd1bWVudChuKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
ICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9TdHJpbmcoZXhlYykp
OworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoZXhlYywgSlNWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJs
ZSgpLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT5hcmd1bWVudChuKSwg
c2xvdCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIGJvb2wgb3BJbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dQogICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJldHVybiBiYXNlT2Jq
LT5oYXNQcm9wZXJ0eShleGVjLCBpKTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywg
cHJvcE5hbWUudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywg
cHJvcE5hbWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBi
YXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEw
NTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBDYWxsVHlwZSBEYXRlQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihwYXJzZURhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSopCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMyArMTU0LDEzIEBA
IHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAgICBib29sIHVzZUN1
c3RvbUZvcm1hdCA9IGZhbHNlOwogICAgIFVTdHJpbmcgY3VzdG9tRm9ybWF0U3RyaW5nOwogCi0g
ICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChhcmcwU3RyaW5nID09ICJjdXN0b20iICYmICFleGVj
LT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIHVzZUN1c3RvbUZvcm1hdCA9
IHRydWU7Ci0gICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgfSBlbHNlIGlmIChmb3JtYXQg
PT0gTG9jYWxlRGF0ZUFuZFRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkp
IHsKICAgICAgICAgZGF0ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRh
dGVTdHlsZSk7Ci0gICAgICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgdGltZVN0eWxlKTsKKyAgICAgICAgdGltZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSwgdGltZVN0eWxlKTsKICAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVU
aW1lICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBkYXRlU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0eWxlKTsKICAgICBlbHNl
IGlmIChmb3JtYXQgIT0gTG9jYWxlRGF0ZSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3Rh
bmNlLmgJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQyLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgICB9CisK
ICAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBFcnJvcklu
c3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFu
Y2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBVU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1Vu
ZGVmaW5lZCgpID8gVVN0cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBhcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSB7
IHJldHVybiBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NTQw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBlcnJvclByb3RvRgogICAgIGlmIChuYW1lLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5h
bWVTdHJpbmcgPSAiRXJyb3IiOwogICAgIGVsc2UgewotICAgICAgICBuYW1lU3RyaW5nID0gbmFt
ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KQEAg
LTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9G
CiAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbWVzc2FnZVN0cmluZyA9
ICIiOwogICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1N0cmlu
ZyhleGVjKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIEpT
T2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEUKICAgICAKIEpTT2JqZWN0KiBj
cmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIG9wLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmco
IiciLCB2YWx1ZS50b1N0cmluZyhleGVjKSwgIicgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9y
ICciLCBvcCwgIiciKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCIn
IiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBub3QgYSB2YWxpZCBh
cmd1bWVudCBmb3IgJyIsIG9wLCAiJyIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uLT5p
c0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2Vw
dGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIEpT
T2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3QKIAogSlNPYmplY3QqIGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJp
bmcoZXhlYyksICInIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7CisgICAgVVN0cmluZyBlcnJvck1l
c3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSwgIicgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlv
bi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihl
eGNlcHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTEzMSw3ICsxMzEsNyBA
QCBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlCiAKIEpTT2JqZWN0KiBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLCAiJyBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgIFVTdHJpbmcgZXJyb3JNZXNz
YWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyks
ICInIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24tPmlz
RXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0
aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xNDAsNyArMTQwLDcgQEAgSlNP
YmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdAogCiBKU09iamVjdCogY3JlYXRl
Tm90QW5PYmplY3RFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
VVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLCAiJyBpcyBub3QgYW4gb2JqZWN0Iik7CisgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBt
YWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIicgaXMg
bm90IGFuIG9iamVjdCIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uLT5pc0Vycm9ySW5z
dGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPnNl
dEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEwNTU0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNyArOTYsMTcgQEAgSlNPYmplY3QqIGNvbnN0cnVj
dEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKICAgICAgICAg
cHJvZ3JhbSA9ICIoZnVuY3Rpb24oKSB7IFxufSkiOwogICAgIGVsc2UgaWYgKGFyZ3Muc2l6ZSgp
ID09IDEpCi0gICAgICAgIHByb2dyYW0gPSBtYWtlVVN0cmluZygiKGZ1bmN0aW9uKCkgeyAiLCBh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCAiXG59KSIpOworICAgICAgICBwcm9ncmFtID0gbWFr
ZVVTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyksICJcbn0pIik7CiAgICAgZWxzZSB7CiAgICAgICAgIFVTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoZnVuY3Rpb24oIik7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBidWlsZGVy
LmFwcGVuZChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYXJncy5zaXplKCkgLSAxOyBpKyspIHsKICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhcmdz
LmF0KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3Mu
YXQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgfQogICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiKSB7ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChhcmdzLmF0KGFy
Z3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBidWlsZGVyLmFwcGVuZChh
cmdzLmF0KGFyZ3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIlxufSkiKTsKICAgICAgICAgcHJvZ3JhbSA9IGJ1aWxkZXIu
dG9VU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblBybwogICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gbnVtQm91bmRB
cmdzOwogICAgIH0KIAotICAgIElkZW50aWZpZXIgbmFtZShleGVjLCB0YXJnZXQuZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRp
ZmllciBuYW1lKGV4ZWMsIHRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgdGFyZ2V0
T2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSwgYm91bmRBcmdzLCBsZW5ndGgsIG5hbWUpKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4
ZWNTdGF0ZSogZXhlYykKICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlv
bi4KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3Qu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZp
c2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTMgKzE0NSw2IEBAIGRvdWJsZSBKU0NlbGw6OnRvTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmpl
Y3QqPih0aGlzKS0+dG9OdW1iZXIoZXhlYyk7CiB9CiAKLVVTdHJpbmcgSlNDZWxsOjp0b1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50b1N0cmluZyhleGVj
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QqPih0aGlzKS0+dG9TdHJp
bmcoZXhlYyk7Ci19Ci0KIEpTT2JqZWN0KiBKU0NlbGw6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAoaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lv
biAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUm
KSBjb25zdDsKICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKIHsKLSAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KHRy
dWUpOworICAgIENTdHJpbmcgY3N0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKS51dGY4KHRydWUpOwogICAgIGlmICghY3N0ci5kYXRhKCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVVSSUVycm9yKGV4ZWMsICJTdHJpbmcgY29u
dGFpbmVkIGFuIGlsbGVnYWwgVVRGLTE2IHNlcXVlbmNlLiIpKTsKIApAQCAtMTQzLDcgKzE0Miw3
IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGMKIHN0YXRpYyBKU1Zh
bHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJv
b2wgc3RyaWN0KQogewogICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcg
c3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgCiAg
ICAgaWYgKHN0ci5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGRlY29kZShleGVjLCBzdHIuY2hh
cmFjdGVyczgoKSwgc3RyLmxlbmd0aCgpLCBkb05vdFVuZXNjYXBlLCBzdHJpY3QpOwpAQCAtNTEz
LDcgKzUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAg
ICBpZiAoIXguaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh4KTsK
IAotICAgIFVTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0geC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewogICAg
ICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFyYWN0ZXJzOCgp
LCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09OKTsKQEAgLTU1Niw3ICs1NTUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgfQogCiAgICAgLy8gSWYgVG9T
dHJpbmcgdGhyb3dzLCB3ZSBzaG91bGRuJ3QgY2FsbCBUb0ludDMyLgotICAgIFVTdHJpbmcgcyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTU2NSw3ICs1NjQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VGbG9hdChleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMpCkBAIC02MjMsNyArNjIyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgICAgICAiKistLi9AXyI7CiAKICAg
ICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChzdHIuaXM4Qml0KCkpIHsK
ICAgICAgICAgY29uc3QgTENoYXIqIGMgPSBzdHIuY2hhcmFjdGVyczgoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IHN0ci5sZW5ndGgoKTsgaysrLCBjKyspIHsKQEAgLTY2Miw3
ICs2NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVVN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBrID0gMDsK
ICAgICBpbnQgbGVuID0gc3RyLmxlbmd0aCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHVud3JhcEJveGVkUHJp
bWl0aQogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykpCiAg
ICAgICAgIHJldHVybiBqc051bWJlcihvYmplY3QtPnRvTnVtYmVyKGV4ZWMpKTsKICAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgb2JqZWN0LT50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBv
YmplY3QtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZCb29sZWFu
T2JqZWN0OjpzX2luZm8pKQogICAgICAgICByZXR1cm4gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVj
KTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0yMjMsMjUgKzIyMywxMiBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIFVTdHJpbmcg
cHJvcGVydHlOYW1lOwotICAgICAgICAgICAgaWYgKG5hbWUuZ2V0U3RyaW5nKGV4ZWMsIHByb3Bl
cnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmFtZS5pc051bWJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBuYW1lLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKG5hbWUuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgICAgIGlmICghYXNPYmplY3QobmFtZSktPmluaGVyaXRzKCZOdW1i
ZXJPYmplY3Q6OnNfaW5mbykgJiYgIWFzT2JqZWN0KG5hbWUpLT5pbmhlcml0cygmU3RyaW5nT2Jq
ZWN0OjpzX2luZm8pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9h
cnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC04MjUsOCArODEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09O
UHJvdG9GdQogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJKU09OLnBhcnNlIHJlcXVp
cmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIiKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KDApOwotICAgIFVTdHJpbmcgc291cmNlID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTgs
MTEgKzUxOCwxMSBAQCBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKIH0KIAotVVN0cmluZyBKU09iamVj
dDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNTdHJpbmcqIEpTT2JqZWN0Ojp0
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUg
PSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmlu
ZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEwNTU0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVj
U3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0cmluZyB0b1N0cmlu
ZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcq
IHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgICAgIC8vIE5PVEU6IEpTT2JqZWN0
IGFuZCBpdHMgc3ViY2xhc3NlcyBtdXN0IGJlIGFibGUgdG8gZ3JhY2VmdWxseSBoYW5kbGUgRXhl
Y1N0YXRlKiA9IDAsCiAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxsIG1heSBjb21lIGZyb20g
aW5zaWRlIHRoZSBjb21waWxlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDExICsyMjksNiBA
QCBkb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpz
VG9OdW1iZXIodmFsdWUoZXhlYykpOwogfQogCi1VU3RyaW5nIEpTU3RyaW5nOjp0b1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZhbHVlKGV4ZWMpOwotfQotCiBp
bmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAg
U3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdP
YmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3
LDcgKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRp
dmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAg
ICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29u
c3Q7Ci0gICAgICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAg
IGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIGJv
b2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC00NTMsMjQgKzQ1MiwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzVHJ1ZSgpOyAvLyBmYWxzZSwgbnVsbCwgYW5kIHVu
ZGVmaW5lZCBhbGwgY29udmVydCB0byBmYWxzZS4KICAgICB9CiAKLSAgICBpbmxpbmUgVVN0cmlu
ZyBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIEpT
U3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U1N0cmluZyo+KGFzQ2VsbCgpKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChpc0ludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFk
ZChhc0ludDMyKCkpOwotICAgICAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKGFzRG91YmxlKCkpOwotICAg
ICAgICBpZiAoaXNUcnVlKCkpCi0gICAgICAgICAgICByZXR1cm4gInRydWUiOwotICAgICAgICBp
ZiAoaXNGYWxzZSgpKQotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7Ci0gICAgICAgIGlmIChp
c051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAgIGlmIChpc1VuZGVm
aW5lZCgpKQotICAgICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwotICAgICAgICBBU1NFUlQo
aXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvU3RyaW5nKGV4ZWMpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOworICAgICAg
ICByZXR1cm4gdG9TdHJpbmdTbG93Q2FzZShleGVjKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJl
dmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTAgKzIwNCw5IEBAIGJvb2wgSlNWYWx1ZTo6aXNW
YWxpZENhbGxlZSgpCiAgICAgcmV0dXJuIGFzT2JqZWN0KGFzQ2VsbCgpKS0+Z2xvYmFsT2JqZWN0
KCk7CiB9CiAKLUpTU3RyaW5nKiBKU1ZhbHVlOjp0b1ByaW1pdGl2ZVN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgaWYgKGlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICBBU1NFUlQoIWlzU3RyaW5nKCkp
OwogICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZygmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIo
KSkpOwogICAgIGlmIChpc0RvdWJsZSgpKQpAQCAtMjIyLDEwICsyMjEsMTEgQEAgSlNTdHJpbmcq
IEpTVmFsdWU6OnRvUHJpbWl0aXZlU3RyaW5nKEV4ZQogICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlZmluZWQudXN0cmluZygp
KTsKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgSlNWYWx1ZSB2ID0gYXNDZWxsKCktPnRv
UHJpbWl0aXZlKGV4ZWMsIE5vUHJlZmVyZW5jZSk7Ci0gICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odi5hc0NlbGwoKSk7Ci0gICAgcmV0
dXJuIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHYudG9TdHJpbmcoZXhlYykpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5n
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc0VtcHR5
U3RyaW5nKGV4ZWMpOworICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7CisgICAgcmV0dXJu
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDEwNTU0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk3LDggKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0b051bWJlciBj
b252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0
aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCiAg
ICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNTdHJpbmcqIHRvUHJpbWl0
aXZlU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1N0cmluZyogdG9TdHJpbmco
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUq
KSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KikgY29uc3Q7CiAKQEAgLTI0NSw2ICsyNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBpbmxpbmUgY29uc3QgSlNWYWx1ZSBhc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2Uo
RXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTU3RyaW5nKiB0b1N0cmluZ1Nsb3dDYXNlKEV4
ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9P
YmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9UaGlzT2JqZWN0U2xvd0Nhc2UoRXhlY1N0
YXRlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
clByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQ3LDcgKzQ0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8K
ICAgICAgICAgcmFkaXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJhZGl4VmFsdWUudG9JbnRlZ2VyKGV4
ZWMpKTsgLy8gbmFuIC0+IDAKIAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBqc051bWJlcih4KS50b1N0cmluZyhleGVj
KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpLnRvU3RyaW5n
KGV4ZWMpKTsKIAogICAgIC8vIEZhc3QgcGF0aCBmb3IgbnVtYmVyIHRvIGNoYXJhY3RlciBjb252
ZXJzaW9uLgogICAgIGlmIChyYWRpeCA9PSAzNikgewpAQCAtNDc0LDcgKzQ3NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICBpZiAoIXRvVGhpc051bWJl
cihleGVjLT5ob3N0VGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
anNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIHsKICAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgcHJvcGVydHkgZGVzY3JpcHRvciBv
ZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9iamVjdC4iKSk7Ci0gICAgVVN0cmluZyBwcm9wZXJ0
eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBy
b3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVj
LT5hcmd1bWVudCgwKSk7CkBAIC0yOTIsNyArMjkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIpKTsKICAgICBK
U09iamVjdCogTyA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBVU3RyaW5nIHBy
b3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmpl
Y3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+aGFzT3duUHJvcGVydHkoZXhlYywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQ5LDcgKzE0OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEoZXhlYy0+YXJndW1lbnQoMSksIGNhbGxEYXRhKSA9
PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
U3ludGF4RXJyb3IoZXhlYywgImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwotICAgIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZUdldHRlcih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhl
Yy0+YXJndW1lbnQoMSkpLCAwKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZp
bmVHZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgxKSksIDApOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRhKGV4ZWMt
PmFyZ3VtZW50KDEpLCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJpbnZhbGlkIHNldHRl
ciB1c2FnZSIpKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVTZXR0ZXIo
dGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgMCk7CisgICAgdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lU2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xNzIsNyArMTcyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3VwR2V0dGVyKGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBHZXR0ZXIoZXhlYywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4MSwxMyArMTgxLDEzIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cFNldHRl
cihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3VwU2V0dGVy
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPnByb3BlcnR5
SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRo
aXNWYWx1ZS50b09iamVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KSkpOwogfQogCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDExIEBAIE5FVkVSX0lOTElORSBK
U1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEYKICAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRp
dmUoY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1l
KTsKIAotICAgIGlmIChwMS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJldHVybiBwMi5pc1N0cmlu
ZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcocDEpLCBhc1N0
cmluZyhwMikpCi0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcocDEp
LCBqc1N0cmluZyhjYWxsRnJhbWUsIHAyLnRvU3RyaW5nKGNhbGxGcmFtZSkpKTsKLSAgICB9Cisg
ICAgaWYgKHAxLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUs
IGFzU3RyaW5nKHAxKSwgcDIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisKICAgICBpZiAocDIuaXNT
dHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwganNTdHJpbmcoY2Fs
bEZyYW1lLCBwMS50b1N0cmluZyhjYWxsRnJhbWUpKSwgYXNTdHJpbmcocDIpKTsKKyAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDEudG9TdHJpbmcoY2FsbEZyYW1lKSwgYXNTdHJp
bmcocDIpKTsKIAogICAgIHJldHVybiBqc051bWJlcihwMS50b051bWJlcihjYWxsRnJhbWUpICsg
cDIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdHJpbmdzW2ldLmpzVmFs
dWUoKTsKLSAgICAgICAgICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgcm9w
ZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0YSwgdi50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYudG9TdHJpbmcoZXhl
YykpOwogCiAgICAgICAgICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkgPCBvbGRMZW5ndGgp
IC8vIFRydWUgZm9yIG92ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjKTsKQEAgLTk3LDIwICs5NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0
YSk7Ci0KLSAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKQotICAgICAgICAgICAgcm9w
ZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHRoaXNWYWx1ZSkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0YSwgdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytp
KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudChpKTsKLSAgICAgICAg
ICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5k
KGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByb3BlQnVp
bGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0YSwgdi50b1N0cmluZyhleGVjKSkpOworICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYudG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAg
ICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkgPCBvbGRMZW5ndGgpIC8vIFRydWUgZm9yIG92
ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKQEAgLTMwMCwxMSArMjkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICh2MS5p
c051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
djEuYXNOdW1iZXIoKSArIHYyLmFzTnVtYmVyKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHYx
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB2Mi5pc1N0cmluZygpCi0gICAgICAg
ICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgYXNTdHJpbmcodjIp
KQotICAgICAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHYy
LnRvUHJpbWl0aXZlU3RyaW5nKGNhbGxGcmFtZSkpOwotICAgICAgICB9CisgICAgICAgIGlmICh2
MS5pc1N0cmluZygpICYmICF2Mi5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxsRnJhbWUpKTsKIAog
ICAgICAgICAvLyBBbGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1vbgogICAgICAgICBy
ZXR1cm4ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFJlZ0V4
cENvbnN0cnVjdG9yOjpwdXQoSlNDZWxsKiBjZWxsCiAKIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0
b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldElucHV0KHZh
bHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3Qp
LT5zZXRJbnB1dCh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiB2b2lk
IHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCkBAIC0zMjMsMTMgKzMyMywxMyBAQCBKU09iamVj
dCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJldHVybiBhc09iamVj
dChhcmcwKTsKICAgICB9CiAKLSAgICBVU3RyaW5nIHBhdHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVk
KCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwYXR0
ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgIGlmICgh
YXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50
b1N0cmluZyhleGVjKSk7CisgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRGbGFn
cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIEpTVmFs
dWUgUmVnRXhwT2JqZWN0OjpleGVjKEV4ZWNTdGF0ZSogZXgKIGJvb2wgUmVnRXhwT2JqZWN0Ojpt
YXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENv
bnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3Rv
cigpOwotICAgIFVTdHJpbmcgaW5wdXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CiAgICAgaWYgKCFyZWdFeHAoKS0+Z2xvYmFsKCkpIHsKICAgICAgICAgaW50IHBv
c2l0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTMg
KzExMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
Q2Fubm90IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGluZyBvbmUgUmVnRXhwIGZyb20gYW5v
dGhlci4iKSk7CiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAo
KTsKICAgICB9IGVsc2UgewotICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJndW1l
bnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBV
U3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBh
cmcwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgICAgICBSZWdFeHBGbGFncyBmbGFncyA9IE5vRmxhZ3M7CiAgICAgICAgIGlm
ICghYXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBmbGFncyA9IHJlZ0V4cEZsYWdz
KGFyZzEudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhh
cmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCkBA
IC0xNTMsNyArMTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
bwogICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwogICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9Cb29sZWFuKGV4ZWMp
KQogICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKLSAgICBVU3RyaW5nIHNvdXJjZSA9IHRo
aXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgLy8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzopLyIgdG8gYXZvaWQgY29sbGlkaW5n
IHdpdGggY29tbWVudCBzeW50YXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcoZXhlYywgIi8iLCBzb3VyY2UubGVuZ3RoKCkgPyBzb3VyY2UgOiBVU3Ry
aW5nKCIoPzopIiksIHBvc3RmaXgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEwNTU0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKICAgICAKLSAgICBKU1N0cmluZyog
c3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKQotICAgICAgICA/IGFzU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApKQotICAgICAgICA6IGpzU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmlu
Z09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJl
KCksIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0Ojpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBTdHJpbmdD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25z
dHJ1Y3REYXRhKQpAQCAtMTExLDcgKzEwOCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGwKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CiB9CiAKIENhbGxUeXBlIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEw
NTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9
IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcg
PSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgY29uc3Qg
VVN0cmluZyYgc291cmNlID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBzb3Vy
Y2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CkBAIC01MDIsMTAgKzUwMiw3IEBAIHN0YXRpYyBORVZF
Ul9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgICAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocmVzdWx0
LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGFz
U3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNhY2hl
ZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRz
LmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpLT52
YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNTQ3LDEwICs1NDQsNyBAQCBzdGF0aWMg
TkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAKICAgICAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHJl
c3VsdC5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVu
ZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhj
YWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMp
KS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU5NCw3ICs1ODgsNyBAQCBzdGF0
aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICAgICAgYXJn
cy5hcHBlbmQoanNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0KSk7CiAgICAgICAgICAgICAgICAg
YXJncy5hcHBlbmQoc3RyaW5nKTsKIAotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBl
bmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50
cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTYzMyw3ICs2MjcsNyBAQCBzdGF0aWMgTkVW
RVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29k
ZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUp
CiB7CiAgICAgY29uc3QgVVN0cmluZyYgc3RyaW5nID0ganNTdHJpbmctPnZhbHVlKGV4ZWMpOwot
ICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NTMsNyArNjQ3LDcgQEAgc3Rh
dGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBVU3RyaW5nIHJl
cGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBy
ZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY2NSwxMiArNjU5LDkgQEAgc3RhdGljIE5FVkVS
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
Ly8gQ2hlY2tPYmplY3RDb2VyY2libGUKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgICAgICB0aGlzVmFsdWUgPSBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYykpOwotICAgIH0KLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmco
dGhpc1ZhbHVlKTsKKyAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENo
ZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAg
SlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgcmVw
bGFjZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTY5OCw3ICs2ODksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwogICAgIEpTVmFsdWUgYTAgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewpAQCAtNzE4LDcgKzcwOSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7CiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigpKSB7CkBAIC03Mzks
MTIgKzczMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA9PSAxKSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2LmlzU3RyaW5nKCkKLSAgICAgICAgICAgID8ganNT
dHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwgYXNTdHJpbmcodikpCi0gICAgICAgICAg
ICA6IGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIGpzU3RyaW5nKCZleGVjLT5n
bG9iYWxEYXRhKCksIHYudG9TdHJpbmcoZXhlYykpKSk7Ci0gICAgfQorICAgIGlmICh0aGlzVmFs
dWUuaXNTdHJpbmcoKSAmJiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSks
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisKICAgICBpZiAodGhpc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmdGcm9tQXJndW1lbnRzKGV4ZWMsIHRoaXNWYWx1ZSkpOwpAQCAtNzU1LDEyICs3NDMs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAgICBKU1ZhbHVlIGEw
ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEp
OwotICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHUyID0g
YTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBwb3M7CiAgICAgaWYgKGEx
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHBvcyA9IDA7CkBAIC03ODYsMTMgKzc3NCwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKLSAg
ICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1MiA9IGEwLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBkb3VibGUgZHBvcyA9IGExLnRvSW50ZWdl
clByZXNlcnZlTmFOKGV4ZWMpOwogICAgIGlmIChkcG9zIDwgMCkKICAgICAgICAgZHBvcyA9IDA7
CkBAIC04MTAsNyArNzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2li
bGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKQEAgLTgyNSw3ICs4MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4
cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAu
NC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAg
ICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKSwgTm9G
bGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQoKSkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVn
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KQEAgLTg2Miw3ICs4NTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtODc3LDcgKzg2NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICogIHJlcGxhY2Vk
IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAg
ICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlzIHVuZGVmaW5lZCBzdWJzdGl0
dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIi
KSA6IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikg
OiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxhZ3MpOwogICAgICAgICBpZiAo
IXJlZy0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCByZWctPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQpAQCAt
ODkzLDcgKzg4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtOTI1LDcgKzkxMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAgIC8vIDIuIExldCBTIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb1N0cmluZywgZ2l2aW5nIGl0IHRoZSB0aGlzIHZhbHVl
IGFzIGl0cyBhcmd1bWVudC4KICAgICAvLyA2LiBMZXQgcyBiZSB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaW4gUy4KLSAgICBVU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogCiAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRlZCBhcyBpZiBieSB0
aGUgZXhwcmVzc2lvbiBuZXcgQXJyYXkoKQogICAgIC8vICAgIHdoZXJlIEFycmF5IGlzIHRoZSBz
dGFuZGFyZCBidWlsdC1pbiBjb25zdHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4KQEAgLTEwMjcsNyAr
MTAxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVTdHJpbmcgc2VwYXJh
dG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc2Vw
YXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAg
ICAgICAgIC8vIDkuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KICAgICAgICAgaWYgKCFsaW1pdCkK
QEAgLTExMTQsNyArMTEwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdVN0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgdVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CkBAIC0xMTQ0LDI0ICsxMTMyLDE2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpbnQg
bGVuOwotICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IDA7Ci0gICAgVVN0cmluZyB1U3RyaW5nOwot
ICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBqc1N0cmluZyA9IHN0YXRp
Y19jYXN0PEpTU3RyaW5nKj4odGhpc1ZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgbGVuID0ganNT
dHJpbmctPmxlbmd0aCgpOwotICAgIH0gZWxzZSBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKLSAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAodGhpc1Zh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVT
dHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorCisgICAgSlNT
dHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1Zh
bHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgaW50IGxlbiA9IGpzU3RyaW5nLT5sZW5n
dGgoKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMpOwogICAgIGRvdWJs
ZSBlbmQ7CkBAIC0xMTg1LDkgKzExNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgfQogICAgIHVuc2lnbmVkIHN1YnN0cmluZ1N0YXJ0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KTsKICAgICB1bnNpZ25lZCBzdWJzdHJpbmdMZW5ndGggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN1YnN0cmluZ1N0YXJ0OwotICAgIGlmIChqc1N0
cmluZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBq
c1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQs
IHN1YnN0cmluZ0xlbmd0aCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJp
bmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2Fz
ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMTk1LDcgKzExNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAv
LyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKLSAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS5pc1N0cmluZygpID8gYXNTdHJp
bmcodGhpc1ZhbHVlKSA6IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKSk7
CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgY29u
c3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCiAgICAgaW50IHNTaXplID0gcy5s
ZW5ndGgoKTsKQEAgLTEyMTQsNyArMTE5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2Jq
ZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAg
IEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLmlzU3RyaW5nKCkgPyBhc1N0cmluZyh0aGlzVmFs
dWUpIDoganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBKU1N0
cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBVU3RyaW5n
JiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBzLmxlbmd0aCgpOwpA
QCAtMTI1NywxMCArMTIzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJj
aWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5h
cmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGxvY2FsZUNv
bXBhcmUocywgYTAudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihsb2NhbGVDb21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNC
aWcoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTI2OCw3ICsxMjQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
Ly8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8YmlnPiIs
IHMsICI8L2JpZz4iKSk7CiB9CiAKQEAgLTEyNzcsNyArMTI1NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHNtYWxs
PiIsIHMsICI8L3NtYWxsPiIpKTsKIH0KIApAQCAtMTI4Niw3ICsxMjY0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Ymxpbms+IiwgcywgIjwvYmxpbms+IikpOwogfQogCkBAIC0xMjk1LDcgKzEyNzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhl
YywgIjxiPiIsIHMsICI8L2I+IikpOwogfQogCkBAIC0xMzA0LDcgKzEyODIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Ijx0dD4iLCBzLCAiPC90dD4iKSk7CiB9CiAKQEAgLTEzMTMsNyArMTI5MSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
PGk+IiwgcywgIjwvaT4iKSk7CiB9CiAKQEAgLTEzMjIsNyArMTMwMCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN0
cmlrZT4iLCBzLCAiPC9zdHJpa2U+IikpOwogfQogCkBAIC0xMzMxLDcgKzEzMDksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhl
YywgIjxzdWI+IiwgcywgIjwvc3ViPiIpKTsKIH0KIApAQCAtMTM0MCw3ICsxMzE4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8c3VwPiIsIHMsICI8L3N1cD4iKSk7CiB9CiAKQEAgLTEzNDksOSArMTMyNyw5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IGNvbG9yPVwi
IiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IGNvbG9y
PVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4i
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9u
dHNpemUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTM1OSw3ICsxMzM3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCiAgICAgdWludDMyX3Qgc21hbGxJbnRl
Z2VyOwpAQCAtMTM5Niw3ICsxMzc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCBpbXBsKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwgYTAudG9TdHJpbmco
ZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIiLCBhMC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtMTQwNCw5ICsxMzgyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RD
b2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+Iiwgcywg
IjwvYT4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAi
XCI+IiwgcywgIjwvYT4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDE0LDkgKzEzOTIsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgVVN0cmluZyBs
aW5rVGV4dCA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgbGlua1RleHQgPSBhMC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBsaW5rVGV4dFNpemUg
PSBsaW5rVGV4dC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBzdHJpbmdTaXplID0gcy5sZW5ndGgo
KTsKQEAgLTE0NTksNyArMTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5n
KEV4ZWNTdGEKIHsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENo
ZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
LSAgICBVU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgbGVmdCA9IDA7CiAgICAgaWYgKHRyaW1LaW5kICYgVHJpbUxlZnQpIHsKICAgICAgICAgd2hp
bGUgKGxlZnQgPCBzdHIubGVuZ3RoKCkgJiYgaXNUcmltV2hpdGVzcGFjZShzdHJbbGVmdF0pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDU2NDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmluZyogaW5zdGVhZCBv
ZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbCk6CisK
IDIwMTItMDEtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1lbnQgYSBuZXcgYWxsb2NhdG9yIGZvciBiYWNraW5nIHN0b3JlcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1
LDcgQEAgQ0ZUeXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbChKU1ZhbAogCiAgICAgICAg
IGlmIChpblZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VVN0cmluZyB1U3RyaW5nID0gaW5WYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVTdHJpbmcgPSBpblZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBVU3RyaW5nVG9DRlN0cmluZyh1U3RyaW5nKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTA1NjQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTI5IEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQgcmV0
dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZyb20g
IkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2luY2UK
KyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2Fy
ZDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpnZXREYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJ
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6dmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Gb3JtRGF0YTo6YXBwZW5kKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpz
ZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3Blbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2aWNlTW90aW9uRXZlbnQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZpY2VPcmllbnRhdGlv
bkV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVu
dDo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFsbENv
bGxlY3Rpb246Om5hbWVkSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50
OjpnZXRDb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Oml0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
b2N1bWVudFdyaXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9u
dGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSmF2YVNjcmlwdENh
bGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJlZik6CisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0xvY2F0aW9uOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNMb2NhdGlvbjo6c2V0U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNl
dEhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUluaXRNZXNz
YWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTU2hhcmVkV29ya2VyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJT
b2NrZXQ6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6OmNsb3NlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dvcmtlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcik6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keSk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFs
dWU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgorICAgICAgICAoSlNW
YWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToK
KyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3Qp
OgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUpOgorICAgICAgICAqIGJy
aWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHA6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3Bh
dGNoVmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKToK
KyAgICAgICAgKEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpp
bnZva2VNZXRob2QpOgorICAgICAgICAqIHRlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcm5hbHM6OnNldFVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMpOgorCiAyMDEyLTAxLTIzICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFVzZSBPVkVSUklERSBmb3IgUG9wdXBNZW51Q2xpZW50J3MgaW1wbGVtZW50
YXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZQogICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJu
IElEQktleTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMu
CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEw
NTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6cHV0RGVsZWdhdGUoCiAKIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpKTsKKyAgICBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSh1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJv
YXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3
IEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUKICAgICB9CiAKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKLSAgICAgICAgY2xpcGJvYXJkLT5j
bGVhckRhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgICAgIGNsaXBib2FyZC0+Y2xlYXJEYXRhKHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05MCw3ICs5MCw3IEBAIEpTVmFsdWUgSlNDbGlw
Ym9hcmQ6OmdldERhdGEoRXhlY1N0YXRlKiAKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGlt
cGwoKTsKIAogICAgIGJvb2wgc3VjY2VzczsKLSAgICBTdHJpbmcgcmVzdWx0ID0gY2xpcGJvYXJk
LT5nZXREYXRhKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSksIHN1Y2Nlc3MpOworICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQtPmdldERhdGEodXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSksIHN1Y2Nlc3MpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcsNyArOTcsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxv
b2t1cE5hCiAgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGlmICghcmV0dmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBy
ZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICB9CiAKICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVu
dHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE0ICsxMjAsMTQgQEAgU3RyaW5nIHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNTdAogewogICAgIGlmICh2YWx1ZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcodmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogU3RyaW5nIHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7
CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogfQogCiBKU1ZhbHVlIGpzRGF0ZU9yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSB2YWx1ZSkKQEAgLTE1MSwxMCArMTUxLDEwIEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlMKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4
Y2VwdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhj
ZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU09iamVjdCogZXhjZXB0
aW9uT2JqZWN0ID0gZXhjZXB0aW9uLnRvT2JqZWN0KGV4ZWMpOwogICAgIGludCBsaW5lTnVtYmVy
ID0gZXhjZXB0aW9uT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGluZSIpKS50
b0ludDMyKGV4ZWMpOwotICAgIFVTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMID0gZXhjZXB0aW9u
T2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAic291cmNlVVJMIikpLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMID0gZXhjZXB0aW9uT2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAic291cmNlVVJMIikpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgaWYgKEV4
Y2VwdGlvbkJhc2UqIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTUgKzYwLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNET01Gb3JtRGEKIEpTVmFsdWUgSlNE
T01Gb3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBTdHJpbmcgbmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAg
ICAgICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKSB7CiAgICAgICAgICAg
ICBTdHJpbmcgZmlsZW5hbWU7CiAgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDMgJiYgIWV4ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgZmlsZW5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9T
dHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAg
ICAgICBpbXBsKCktPmFwcGVuZChuYW1lLCB0b0Jsb2IodmFsdWUpLCBmaWxlbmFtZSk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwgdXN0cmluZ1RvU3Ry
aW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICBpbXBsKCktPmFwcGVuZChu
YW1lLCB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lv
biAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBKU0RPTVN0cmlu
Z01hcDo6ZGVsZXRlUHJvcGVydHkoSlNDZQogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxl
Z2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWUg
PSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzdHJp
bmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24o
RXhlY1N0YXRlKgogICAgIH0KICNlbmRpZgogCi0gICAgVVN0cmluZyBsb2NhdGlvblN0cmluZyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTUxMiw3ICs1MTIsNyBAQCBKU1ZhbHVlIEpTRE9N
V2luZG93OjpvcGVuKEV4ZWNTdGF0ZSogZXhlCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IHVz
dHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7
CkBAIC02NzksNyArNjc5LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cihFeAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWlj
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFk
ZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2Jq
ZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKQEAgLTY5Myw3ICs2OTMsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExp
c3RlbmVyCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9B
dG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoZXhlYykpLmdldCgpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAg
IGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEw
NTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgSlNWYWx1ZSBKU0Rl
dmljZU1vdGlvbkV2ZW50OjppbnRlcnZhbChFeAogCiBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZl
bnQ6OmluaXREZXZpY2VNb3Rpb25FdmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3Qg
U3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBib29sIGJ1YmJs
ZXMgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgYm9vbCBjYW5jZWxh
YmxlID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRp
b25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDcgQEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmFi
c29sdQogCiBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6aW5pdERldmljZU9yaWVu
dGF0aW9uRXZlbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAg
Y29uc3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgYm9vbCBidWJibGVzID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKICAgICAvLyBJZiBhbHBoYSwgYmV0YSBvciBnYW1t
YSBhcmUgbnVsbCBvciB1bmRlZmluZWQsIG1hcmsgdGhlbSBhcyBub3QgcHJvdmlkZWQuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlzaW9u
IDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZl
cnRWYWx1ZShFeGVjU3RhdAogCiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0
ID0gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXN1bHQgPSB1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAog
dm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFNjcmlwdFZhbHVlJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzdHIg
PSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzdHIg
PSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAog
ICAgIEZyYW1lKiBsZXhpY2FsRnJhbWUgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdAogICAgICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghcmV0dmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkg
JiYgZXZlbnQtPnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZXZlbnQt
PnN0b3JlUmVzdWx0KHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICAgICAgICAgICAgICBldmVudC0+c3RvcmVSZXN1bHQodXN0cmluZ1RvU3RyaW5nKHJldHZhbC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIGlmIChtX2lzQXR0cmli
dXRlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJldHZhbC5pc0ZhbHNlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFs
bENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxs
KDxpbmRleD4pIGV0Yy4KICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgVVN0cmluZyBzdHJpbmcg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHJp
bmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoc3RyaW5nLCBvayk7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhl
eGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pdGVtKGluZGV4
KSkpOwpAQCAtODMsOCArODMsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2Yg
dGhlIGl0ZW0gd2Ugd2FudAogICAgIGJvb2wgb2s7Ci0gICAgVVN0cmluZyBzdHJpbmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IElkZW50
aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLCBvayk7Cisg
ICAgVVN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgdW5zaWduZWQgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIG9rKTsKICAgICBpZiAo
b2spIHsKICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5uYW1lZEl0ZW1XaXRo
SW5kZXgodXN0cmluZ1RvQXRvbWljU3RyaW5nKHN0cmluZyksIGluZGV4KSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9i
amVjdCgpLCBub2RlKSk7CkBAIC0xMTMsMTUgKzExMywxNSBAQCBKU1ZhbHVlIEpTSFRNTEFsbENv
bGxlY3Rpb246Om5hbWVHZXR0ZXIoCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0o
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGJvb2wgb2s7Ci0gICAgdWludDMyX3QgaW5kZXggPSBJ
ZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgb2sp
OworICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKQogICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLT5pdGVtKGluZGV4
KSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVj
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0TmFtZWRJ
dGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZh
c0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRp
Y19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBjb25zdCBVU3RyaW5nJiBj
b250ZXh0SWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBV
U3RyaW5nJiBjb250ZXh0SWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiBhdHRyczsKICNp
ZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmds
IiB8fCBjb250ZXh0SWQgPT0gIndlYmtpdC0zZCIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE1IEBAIEpTVmFsdWUgSlNI
VE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGUKIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlvbjo6
aXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYm9vbCBvazsKLSAgICB1aW50MzJfdCBpbmRl
eCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LCBvayk7CisgICAgdWludDMyX3QgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIG9rKTsKICAgICBpZiAob2sp
CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCktPml0ZW0o
aW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVy
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdl
dE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSBKU0hUTUxDb2xs
ZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpOwogfQogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YQogCiAgICAgc2l6ZV90IHNpemUg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAKLSAgICBVU3RyaW5nIGZpcnN0U3RyaW5nID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBmaXJzdFN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBTZWdt
ZW50ZWRTdHJpbmcgc2VnbWVudGVkU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGZpcnN0U3RyaW5n
KTsKICAgICBpZiAoc2l6ZSAhPSAxKSB7CiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAg
IHNlZ21lbnRlZFN0cmluZy5jbGVhcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmlu
ZyBzdWJzZXF1ZW50U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyBzdWJzZXF1ZW50U3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
aSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHNlZ21lbnRl
ZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKHVzdHJpbmdUb1N0cmluZyhzdWJzZXF1ZW50
U3RyaW5nKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElu
cHV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9p
ZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkRpcgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaW5wdXQtPnNldFNlbGVjdGlvbkRpcmVjdGlvbih1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpbnB1dC0+c2V0U2VsZWN0aW9uRGlyZWN0aW9u
KHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKIH0K
IAogSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTk3LDcgKzk3LDcgQEAgSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNl
dFNlbGVjdGlvbgogCiAgICAgaW50IHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKICAgICBpbnQgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAg
ICBTdHJpbmcgZGlyZWN0aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgZGlyZWN0aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBpbnB1
dC0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyZWN0aW9uKTsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEw
NTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRI
b3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE0ICsxMDUsMTQgQEAgSlNWYWx1
ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbgogICAgICAgICBpZiAoIXR5cGUuaXNT
dHJpbmcoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFN0cmluZyB0eXBlU3Ry
aW5nID0gdXN0cmluZ1RvU3RyaW5nKHR5cGUudG9TdHJpbmcoZXhlYykpOworICAgICAgICBTdHJp
bmcgdHlwZVN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyh0eXBlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgICAgIGlmICh0eXBlU3RyaW5nID09ICJzZXBhcmF0b3IiKSB7CiAgICAg
ICAgICAgICBpdGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtQ3VzdG9tVGFnTm9BY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ29u
dGV4dE1lbnVBY3Rpb24gdHlwZWRJZCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihD
b250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnICsgaWQudG9JbnQzMihleGVjKSk7Ci0gICAgICAg
ICAgICBDb250ZXh0TWVudUl0ZW0qIG1lbnVJdGVtID0gbmV3IENvbnRleHRNZW51SXRlbSgodHlw
ZVN0cmluZyA9PSAiY2hlY2tib3giID8gQ2hlY2thYmxlQWN0aW9uVHlwZSA6IEFjdGlvblR5cGUp
LCB0eXBlZElkLCB1c3RyaW5nVG9TdHJpbmcobGFiZWwudG9TdHJpbmcoZXhlYykpKTsKKyAgICAg
ICAgICAgIENvbnRleHRNZW51SXRlbSogbWVudUl0ZW0gPSBuZXcgQ29udGV4dE1lbnVJdGVtKCh0
eXBlU3RyaW5nID09ICJjaGVja2JveCIgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlw
ZSksIHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKTsKICAgICAgICAgICAgIGlmICghZW5hYmxlZC5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICAgICAgICAgIG1lbnVJdGVtLT5zZXRFbmFibGVkKGVuYWJsZWQudG9Cb29sZWFuKGV4ZWMpKTsK
ICAgICAgICAgICAgIGlmICghY2hlY2tlZC5pc1VuZGVmaW5lZCgpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBleGNlcHRpb247
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgp
LT5ldmFsdWF0ZShleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyks
IGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3
ICsxNzksNyBAQCB2b2lkIEpTTG9jYXRpb246OmRlZmluZUdldHRlcihKU09iamVjdCogCiAKIHZv
aWQgSlNMb2NhdGlvbjo6c2V0SHJlZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgVVN0cmluZyBocmVmID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBo
cmVmID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0SHJlZih1c3Ry
aW5nVG9TdHJpbmcoaHJlZiksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3co
ZXhlYykpOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SHJlZihFeGVj
U3RhdGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwcm90b2NvbCA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcHJvdG9jb2wgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm47CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBK
U0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIAogCiB2b2lkIEpTTG9jYXRpb246OnNl
dEhvc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgaG9z
dCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaG9zdCA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhvc3QodXN0cmluZ1RvU3RyaW5nKGhvc3Qp
LCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIwNSw3
ICsyMDUsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3QoRXhlY1N0YXRlKiBleGVjCiAKIHZv
aWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIFVTdHJpbmcgaG9zdG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIGhvc3RuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+
c2V0SG9zdG5hbWUodXN0cmluZ1RvU3RyaW5nKGhvc3RuYW1lKSwgYWN0aXZlRE9NV2luZG93KGV4
ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKU0xv
Y2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUqIAogCiB2b2lkIEpTTG9jYXRpb246OnNldFBv
cnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcG9ydCA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcG9ydCA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldFBvcnQodXN0cmluZ1RvU3RyaW5nKHBvcnQpLCBh
Y3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIyMSw3ICsy
MjEsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBvcnQoRXhlY1N0YXRlKiBleGVjCiAKIHZvaWQg
SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3Ry
aW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0
UGF0aG5hbWUodXN0cmluZ1RvU3RyaW5nKHBhdGhuYW1lKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMp
LCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBKU0xvY2F0
aW9uOjpzZXRQYXRobmFtZShFeGVjU3RhdGUqIAogCiB2b2lkIEpTTG9jYXRpb246OnNldFNlYXJj
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwYXRobmFt
ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRTZWFyY2godXN0cmluZ1RvU3RyaW5n
KHBhdGhuYW1lKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7
CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRl
KiBleAogCiB2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIFVTdHJpbmcgaGFzaCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgaGFzaCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNl
dEhhc2godXN0cmluZ1RvU3RyaW5nKGhhc2gpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0
RE9NV2luZG93KGV4ZWMpKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNl
dEhhc2goRXhlY1N0YXRlKiBleGVjCiAKIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwoKS0+cmVwbGFj
ZSh1c3RyaW5nVG9TdHJpbmcodXJsU3RyaW5nKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJz
dERPTVdpbmRvdyhleGVjKSk7CkBAIC0yNjAsNyArMjYwLDcgQEAgSlNWYWx1ZSBKU0xvY2F0aW9u
OjpyZWxvYWQoRXhlY1N0YXRlKiBleAogCiBKU1ZhbHVlIEpTTG9jYXRpb246OmFzc2lnbihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwoKS0+YXNzaWdu
KHVzdHJpbmdUb1N0cmluZyh1cmxTdHJpbmcpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0
RE9NV2luZG93KGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDExICsxMDIsMTEgQEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6cG9ydHMo
RXhlY1N0YXRlKgogCiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQo
SlNNZXNzYWdlRXZlbnQqIGpzRXZlbnQsIEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGNv
bnN0IFVTdHJpbmcmIHR5cGVBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
KyAgICBjb25zdCBVU3RyaW5nJiB0eXBlQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGJvb2wgY2FuQnViYmxlQXJnID0gZXhlYy0+YXJndW1l
bnQoMSkudG9Cb29sZWFuKGV4ZWMpOwogICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICBjb25zdCBVU3RyaW5nJiBvcmlnaW5Bcmcg
PSBleGVjLT5hcmd1bWVudCg0KS50b1N0cmluZyhleGVjKTsKLSAgICBjb25zdCBVU3RyaW5nJiBs
YXN0RXZlbnRJZEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvU3RyaW5nKGV4ZWMpOworICAgIGNv
bnN0IFVTdHJpbmcmIG9yaWdpbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDQpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBsYXN0RXZlbnRJZEFyZyA9IGV4ZWMt
PmFyZ3VtZW50KDUpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBET01XaW5kb3cq
IHNvdXJjZUFyZyA9IHRvRE9NV2luZG93KGV4ZWMtPmFyZ3VtZW50KDYpKTsKICAgICBPd25QdHI8
TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzOwogICAgIGlmICghZXhlYy0+YXJndW1lbnQo
NykuaXNVbmRlZmluZWRPck51bGwoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTU0
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2Fj
dGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKQEAgLTgxLDcgKzgxLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVj
dXRlU3FsKEV4ZQogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUuYXNOdW1i
ZXIoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRo
ZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0Ci0gICAgICAgICAgICAgICAgc3Fs
VmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvblN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2Fj
dGlvblN5bmM6OmV4ZWN1dGVTcWwKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKQEAgLTgwLDcgKzgwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uU3luYzo6
ZXhlY3V0ZVNxbAogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUuYXNOdW1i
ZXIoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRo
ZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0Ci0gICAgICAgICAgICAgICAgc3Fs
VmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRX
b3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MiwxMCArNjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1NoYXJl
ZFdvcgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKSk7CiAKLSAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFVTdHJpbmcgbmFtZTsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkKLSAgICAgICAgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBKU1N0b3JhZ2U6OnB1dERl
bGVnYXRlKEV4ZWNTdGF0ZSogZQogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1Rv
U3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RXh0ZQogICAgICAgICByZXR1cm4gdGhyb3dTeW50YXhFcnJvcihleGVjKTsKIAog
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBuYW1lID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBT
dHJpbmcmIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24g
PSBjb250ZXh0LT5nZXRFeHRlbnNpb24obmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU1NDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1dlYlNvY2tldAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIpKTsKIAotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmco
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyB1cmxTdHJpbmcg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIndyb25nIFVSTCIpKTsK
ICAgICBSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQgPSBXZWJTb2NrZXQ6OmNyZWF0ZShjb250
ZXh0KTsKQEAgLTczLDE0ICs3MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
V2ViU29ja2V0CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7CiAgICAgICAg
ICAgICBKU0FycmF5KiBwcm90b2NvbHNBcnJheSA9IGFzQXJyYXkocHJvdG9jb2xzVmFsdWUpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5LT5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0cmluZ1Rv
U3RyaW5nKHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKHByb3RvY29sc0Fy
cmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHByb3RvY29s
cy5hcHBlbmQocHJvdG9jb2wpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd2ViU29ja2V0
LT5jb25uZWN0KHVybFN0cmluZywgcHJvdG9jb2xzLCBlYyk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzVmFs
dWUudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0cmlu
Z1RvU3RyaW5nKHByb3RvY29sc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAgICAgd2ViU29ja2V0LT5j
b25uZWN0KHVybFN0cmluZywgcHJvdG9jb2wsIGVjKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU1Zh
bHVlIEpTV2ViU29ja2V0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlCiAgICAgZWxzZSBpZiAobWVzc2Fn
ZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQogICAgICAgICByZXN1bHQgPSBpbXBsKCktPnNl
bmQodG9CbG9iKG1lc3NhZ2UpLCBlYyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBzdHJp
bmdNZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5nKG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOworICAg
ICAgICBTdHJpbmcgc3RyaW5nTWVzc2FnZSA9IHVzdHJpbmdUb1N0cmluZyhtZXNzYWdlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICByZXN1bHQgPSBp
bXBsKCktPnNlbmQoc3RyaW5nTWVzc2FnZSwgZWMpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIEpTVmFs
dWUgSlNXZWJTb2NrZXQ6OmNsb3NlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgIHggPSBjbGFt
cFRvKHgsIG1pblZhbHVlLCBtYXhWYWx1ZSk7CiAgICAgICAgIGNvZGUgPSBjbGFtcFRvSW50ZWdl
cih4KTsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikgewotICAgICAgICAgICAgcmVh
c29uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICAgICAgICAgIHJlYXNvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRB
WF9FUlIpOwogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAg
SlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMoRQogCiAgICAgVmVjdG9yPFN0
cmluZz4gdXJsczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRD
b3VudCgpOyBpKyspIHsKLSAgICAgICAgdXJscy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHVybHMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NTQwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXb3JrZXJDb24KICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0g
ICAgVVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw4ICs4NSw4IEBAIEpTVmFsdWUgSlNY
TUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJy
b3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0gICAgY29uc3QgS1VSTCYgdXJs
ID0gaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSkpOwotICAgIFN0cmluZyBt
ZXRob2QgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykp
OworICAgIGNvbnN0IEtVUkwmIHVybCA9IGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5jb21wbGV0ZVVSTCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAz
KSB7CkBAIC0xMjksNyArMTI5LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4
ZWNTdGF0ZQogICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXI6OnNf
aW5mbykpCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1ZmZlcih2YWwpLCBlYyk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltcGwoKS0+c2VuZCh1c3RyaW5nVG9TdHJpbmco
dmFsLnRvU3RyaW5nKGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHVzdHJp
bmdUb1N0cmluZyh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgZWMpOwogICAgIH0K
IAogICAgIGludCBzaWduZWRMaW5lTnVtYmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU1
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5ICs4OSw5IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vz
c29yOjpzZXRQYXJhbWV0ZXIoRXgKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWRPck51bGwoKSB8fCBleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgLy8gVGhyb3cgZXhjZXB0aW9uPwotICAgIFN0
cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyB2YWx1ZSA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5n
IG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAg
ICBTdHJpbmcgdmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpbXBsKCktPnNldFBhcmFtZXRlcihuYW1lc3Bh
Y2VVUkksIGxvY2FsTmFtZSwgdmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpA
QCAtMTAwLDggKzEwMCw4IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIo
RXgKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3Ry
aW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBs
b2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBpbXBsKCktPmdldFBhcmFtZXRl
cihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoZXhlYywgdmFsdWUpOwogfQpAQCAtMTEwLDggKzExMCw4IEBAIEpTVmFsdWUgSlNYU0xUUHJv
Y2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgU3Ry
aW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpbXBsKCktPnJlbW92
ZVBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAg
UGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFjdAogICAgIGlmIChnZXRDYWxs
RGF0YSh2LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgIGlmIChwb2xpY3kg
JiYgIXBvbGljeS0+YWxsb3dFdmFsKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgVVN0cmluZyBzdHJpbmcgPSB2LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5n
IHN0cmluZyA9IHYudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTY2hlZHVsZWRBY3Rpb24odXN0cmluZ1RvU3RyaW5nKHN0cmlu
ZyksIGlzb2xhdGVkV29ybGQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBAIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHko
RG9jdW1lbnQKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNG
dW5jdGlvbihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4g
IiI7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhqc0Z1bmN0aW9uLT50b1N0cmluZyhzY3Jp
cHRTdGF0ZUZyb21Ob2RlKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKSwgZG9jdW1lbnQpKSk7
CisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tTm9kZShqc0xp
c3RlbmVyLT5pc29sYXRlZFdvcmxkKCksIGRvY3VtZW50KTsKKyAgICByZXR1cm4gdXN0cmluZ1Rv
U3RyaW5nKGpzRnVuY3Rpb24tPnRvU3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3Rh
dGUpKTsKIH0KIAogYm9vbCBldmVudExpc3RlbmVySGFuZGxlckxvY2F0aW9uKERvY3VtZW50KiBk
b2N1bWVudCwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgU3RyaW5nJiBzb3VyY2VOYW1l
LCBpbnQmIGxpbmVOdW1iZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgYm9v
bCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNjcmlwdFN0YXRlKgogCiBTdHJpbmcgU2NyaXB0VmFs
dWU6OnRvU3RyaW5nKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKLSAgICBTdHJp
bmcgcmVzdWx0ID0gdXN0cmluZ1RvU3RyaW5nKG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0
U3RhdGUpKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gdXN0cmluZ1RvU3RyaW5nKG1fdmFsdWUuZ2V0
KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1ZShzY3JpcHRTdGF0ZSkpOwogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFzIHBhcnQgb2YgaW52
b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KICAgICBpZiAoc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIEVO
RAogICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxp
c3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgaW1wbC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50
TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0LCBmYWxz
ZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFyZ3VtZW50
KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0
ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVu
ZXIpLCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0
ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiBFTkQKICAgICByZXR1cm4gQEdlbmVy
YXRlRXZlbnRMaXN0ZW5lckltcGw7CkBAIC0yOTEyLDcgKzI5MTIsNyBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgICAgIHJldHVybiAi
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsVG9OdWxsU3RyaW5nIn0gfHwgJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifTsKICAgICAgICAgcmV0dXJuICJ2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRz
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9O
dWxsU3RyaW5nIn07Ci0gICAgICAgIHJldHVybiAidXN0cmluZ1RvU3RyaW5nKCR2YWx1ZS5pc0Vt
cHR5KCkgPyBVU3RyaW5nKCkgOiAkdmFsdWUudG9TdHJpbmcoZXhlYykpIjsKKyAgICAgICAgcmV0
dXJuICJ1c3RyaW5nVG9TdHJpbmcoJHZhbHVlLmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6ICR2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUg
ZXEgIkRPTU9iamVjdCIpIHsKQEAgLTM0OTIsNyArMzQ5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtjb25zdHJ1Y3QKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywg
IkNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUi
KSk7CiAKLSAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gdXN0cmluZ1RvQXRvbWljU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBBdG9taWNTdHJpbmcgZXZl
bnRUeXBlID0gdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIAogICAgIFZP
SURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsK
LSAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgQ1N0cmluZyBjc3RyaW5nID0gdXN0cmluZy51dGY4KCk7CiAgICAgICAgIE5QU3RyaW5n
IHN0cmluZyA9IHsgKGNvbnN0IE5QVVRGOCopY3N0cmluZy5kYXRhKCksIHN0YXRpY19jYXN0PHVp
bnQzMl90Pihjc3RyaW5nLmxlbmd0aCgpKSB9OwogICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlh
bnRXaXRoU3RyaW5nQ29weShyZXN1bHQsICZzdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODgs
NyArNDg4LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iagogICAg
ICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVj
dG9ySUQsIChqZG91YmxlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIEpOSUVudiAqZW52ID0g
Z2V0Sk5JRW52KCk7CiAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3U3RyaW5nICgoY29uc3QgamNo
YXIgKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKICAg
ICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCShyZXZpc2lvbiAx
MDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIGpvYmplY3QgY29u
dmVydEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICAgICAgICAgICAgICBlbnYtPk5ld1N0cmlu
Z1VURigiIikpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBp
dGVtLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1Zh
bHVlID0gaXRlbS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAg
ICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSwgaSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIgKilz
dHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJ
bnN0YW5jZVRvSmF2CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3
Q2hhckFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0u
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0
ZW0udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIGpjaGFyIHZh
bHVlID0gMDsKICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoKCkgPiAwKQog
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgoY29uc3QgamNoYXIqKXN0cmluZ1ZhbHVlLmNo
YXJhY3RlcnMoKSlbMF07CkBAIC0yNDksNyArMjQ5LDcgQEAganZhbHVlIGNvbnZlcnRWYWx1ZVRv
SlZhbHVlKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgLy8gY29udmVydGluZyBmcm9tIGEgbnVs
bC4KICAgICAgICAgICAgIGlmICghcmVzdWx0LmwgJiYgIXN0cmNtcChqYXZhQ2xhc3NOYW1lLCAi
amF2YS5sYW5nLlN0cmluZyIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwo
KSkgewotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2
YVN0cmluZyA9IGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIqKXN0
cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwgc3RyaW5nVmFsdWUubGVuZ3RoKCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAJKHJldmlzaW9uIDEwNTU0MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAganZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZy
b21JbnN0YQogICAgICAgICAgICAgICAgIGFyZ3NbMF0ubCA9IGppbnN0YW5jZTsKICAgICAgICAg
ICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCks
IGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgcmV0dXJuVHlwZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAs
IGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGVz
Y3JpcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJy
b3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25E
ZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBKU1ZhbHVlIEphdmFGaWVsZDo6
dmFsdWVGcm9tSW5zdGFuY2UoRXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIExPRyhM
aXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UgZ2V0dGluZyAlcyA9ICVz
IiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBqc3Jlc3VsdC50b1N0cmlu
ZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZSBnZXR0aW5nICVzID0gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBs
KCkpLnV0ZjgoKS5kYXRhKCksIGpzcmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5h
c2NpaSgpLmRhdGEoKSk7CiAKICAgICByZXR1cm4ganNyZXN1bHQ7CiB9CkBAIC0xNzIsNyArMTcy
LDcgQEAgdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbgogICAgICAgICAg
ICAgICAgIGFyZ3NbMV0gPSBqYXZhVmFsdWU7CiAgICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklD
YWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFs
c2UsIEphdmFUeXBlVm9pZCwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uKTsKICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9u
RGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTCiAgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEphdmFJbnN0YW5jZSo+KGkpOwogICAgIGp2YWx1ZSBqYXZhVmFsdWUgPSBjb252ZXJ0VmFsdWVU
b0pWYWx1ZShleGVjLCBpLT5yb290T2JqZWN0KCksIGFWYWx1ZSwgbV90eXBlLCB0eXBlQ2xhc3NO
YW1lKCkpOwogCi0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5z
dGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSkudXRm
OCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBM
T0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSBzZXR0aW5nIHZh
bHVlICVzIHRvICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBhVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBKYXZhVHlwZUFycmF5OgpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lv
biAxMDU1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VK
U0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgSlNWYWx1ZSBKYXZhSW5z
dGFuY2U6Omludm9rZU1ldGhvZChFeGVjUwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CiAgICAgICAgIENTdHJpbmcgamF2YUNsYXNzTmFtZSA9IGpNZXRob2QtPnBhcmFtZXRlckF0
KGkpLnV0ZjgoKTsKICAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVj
LCBtX3Jvb3RPYmplY3QuZ2V0KCksIGV4ZWMtPmFyZ3VtZW50KGkpLCBqYXZhVHlwZUZyb21DbGFz
c05hbWUoamF2YUNsYXNzTmFtZS5kYXRhKCkpLCBqYXZhQ2xhc3NOYW1lLmRhdGEoKSk7Ci0gICAg
ICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0g
PSAlcyIsIGksIGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2Qg
YXJnWyVkXSA9ICVzIiwgaSwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBqdmFsdWUgcmVzdWx0OwpAQCAt
MjE0LDcgKzIxNCw3IEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1MK
ICAgICAgICAgam1ldGhvZElEIG1ldGhvZElkID0gZ2V0TWV0aG9kSUQob2JqLCBqTWV0aG9kLT5u
YW1lKCkudXRmOCgpLmRhdGEoKSwgak1ldGhvZC0+c2lnbmF0dXJlKCkpOwogICAgICAgICBoYW5k
bGVkID0gZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBv
YmosIGpNZXRob2QtPmlzU3RhdGljKCksIGpNZXRob2QtPnJldHVyblR5cGUoKSwgbWV0aG9kSWQs
IGpBcmdzLmRhdGEoKSwgcmVzdWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7
CiAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgewotICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVj
LCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHND
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSlNJbnRlcm5h
bHM6OnNldFVzZXJQcmVmZXJyZWRMYW5ndWEKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7
CiAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGxhbmd1
YWdlID0gdXN0cmluZ1RvU3RyaW5nKGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKSk7
CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5k
ZXgoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFw
cGVuZChsYW5ndWFnZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1
NjQxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4K
KworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmluZyog
aW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGNhbGwgdmFsdWUoKSBhZnRlciBjYWxs
aW5nIHRvU3RyaW5nKCksIHRvCisgICAgICAgIGNvbnZlcnQgZnJvbSAiSlMgc3RyaW5nIiAoSlNT
dHJpbmcqKSB0byAiQysrIHN0cmluZyIgKFVTdHJpbmcpLCBzaW5jZQorICAgICAgICB0b1N0cmlu
ZygpIG5vIGxvbmdlciByZXR1cm5zIGEgIkMrKyBzdHJpbmciLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudCk6CisK
IDIwMTItMDEtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgV2ViS2l0MiByZW1lbWJlciB0aGUgaGVpZ2h0IG9mIHRoZSBXZWIgSW5zcGVjdG9y
IHdoZW4gaXQgaXMgZG9ja2VkLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
NyArMTYzLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogICAg
IH0KIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIE5QU3RyaW5nIG5wU3Ry
aW5nID0gY3JlYXRlTlBTdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykudXRmOCgpKTsKKyAgICAg
ICAgTlBTdHJpbmcgbnBTdHJpbmcgPSBjcmVhdGVOUFN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykudXRmOCgpKTsKICAgICAgICAgU1RSSU5HTl9UT19OUFZBUklBTlQobnBT
dHJpbmcuVVRGOENoYXJhY3RlcnMsIG5wU3RyaW5nLlVURjhMZW5ndGgsIHZhcmlhbnQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQx
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4K
KworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmluZyog
aW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGNhbGwgdmFsdWUoKSBhZnRlciBjYWxs
aW5nIHRvU3RyaW5nKCksIHRvCisgICAgICAgIGNvbnZlcnQgZnJvbSAiSlMgc3RyaW5nIiAoSlNT
dHJpbmcqKSB0byAiQysrIHN0cmluZyIgKFVTdHJpbmcpLCBzaW5jZQorICAgICAgICB0b1N0cmlu
ZygpIG5vIGxvbmdlciByZXR1cm5zIGEgIkMrKyBzdHJpbmciLgorCisgICAgICAgICogUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAg
ICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRo
R2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisKIDIwMTItMDEtMjAgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgUnVuTG9vcCB3b3JrIGZv
ciBXZWJLaXQxCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAx
MDU1NDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNTgsNyArMTI1OCw3IEBAIHZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWwKIAogICAgIGlmICh2YWx1ZS5p
c1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6dXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKV07CisgICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSldOwog
ICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OkRvdWJsZVZhbHVlVHlwZV1dOwogICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnRvTnVtYmVy
KGV4ZWMpXV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlz
aW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyCiAgICAgICAgIHJldHVybiBAIiI7CiAKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0
LnRvU3RyaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgcmV0dXJuIHVzdHJpbmdU
b1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogLSAoTlNS
ZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihO
U1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CkBAIC0xMTkxLDcgKzExOTIsOCBAQCAtIChOU1N0
cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgICAgIHJldHVybiBAIiI7CiAK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiB1c3Ry
aW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogLSAoSlNHbG9iYWxDb250ZXh0UmVmKV9nbG9i
YWxDb250ZXh0Rm9yU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123634</attachid>
            <date>2012-01-23 15:25:18 -0800</date>
            <delta_ts>2012-01-23 15:56:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123152517.patch</filename>
            <type>text/plain</type>
            <size>149278</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IGJ1aWxkIGFmdGVyIHIxMDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxMyArNTY3LDEzIEBAIF9f
Wk5LM0pTQzE5U291cmNlUHJvdmlkZXJDYWNoZThieXRlU2l6ZUUKIF9fWk5LM0pTQzZKU0NlbGwx
MXRvUHJpbWl0aXZlRVBOU185RXhlY1N0YXRlRU5TXzIyUHJlZmVycmVkUHJpbWl0aXZlVHlwZUUK
IF9fWk5LM0pTQzZKU0NlbGw4dG9OdW1iZXJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M2SlND
ZWxsOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RQotX19aTksz
SlNDNkpTQ2VsbDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0
U3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlF
eGVjU3RhdGVFUk5TXzdVU3RyaW5nRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8K
IF9fWk5LM0pTQzdKU0FycmF5MTJzdWJjbGFzc0RhdGFFdgogX19aTkszSlNDN0pTVmFsdWUxNnRv
TnVtYmVyU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9PYmpl
Y3RTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKK19fWk5LM0pT
QzdKU1ZhbHVlMTZ0b1N0cmluZ1Nsb3dDYXNlRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0pT
VmFsdWUxOXN5bnRoZXNpemVQcm90b3R5cGVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTIwdG9UaGlzT2JqZWN0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJpCiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwog
Ci0gICAgICAgIHByaW50ZigiJXMiLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBw
dXRjaGFyKCdcbicpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRlYnVnKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xu
IiwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudXRmOCgpLmRhdGEoKSk7CisgICAg
ZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBW
ZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7
CkBAIC0yOTQsNyArMjk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwpAQCAtMzEwLDcgKzMxMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBu
b3Qgb3BlbiBmaWxlLiIpKSk7CkBAIC00ODcsOSArNDg3LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0
aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGR1bXApIHsKICAgICAgICAgICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAl
c1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246
ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwg
cmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBnbG9i
YWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNTQ2LDkgKzU0Niw5IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBK
U1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2
YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52
YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVU
b1N0cmluZ0NvcHkoSlNDb250ZXgKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywg
dmFsdWUpOwogICAgIAotICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1
ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgIFJlZlB0cjxP
cGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNiBA
QCBFWFBPUlRTCiAgICAgP3RvT2JqZWN0QEpTQ2VsbEBKU0NAQFFCRVBBVkpTT2JqZWN0QDJAUEFW
RXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID90b09iamVjdFNsb3dDYXNl
QEpTVmFsdWVASlNDQEBBQkVQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFs
T2JqZWN0QDJAQFoKICAgICA/dG9TdHJpbmdASlNDZWxsQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFBB
VkV4ZWNTdGF0ZUAyQEBaCi0gICAgP3RvU3RyaW5nQEpTT2JqZWN0QEpTQ0BAUUJFP0FWVVN0cmlu
Z0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVjaW1hbEBEZWNpbWFsTnVtYmVy
QFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVy
QFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9UaGlzT2JqZWN0QEpTT2JqZWN0QEpTQ0BAU0FQQVYx
MkBQQVZKU0NlbGxAMkBQQVZFeGVjU3RhdGVAMkBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw3IEBAIHN0YXRpYyBVU3RyaW5nIHZhbHVlVG9Tb3VyY2VTdHJpbmcoRXhlY1MK
ICAgICAgICAgcmV0dXJuICIwIjsKIAogICAgIGlmICh2YWwuaXNTdHJpbmcoKSkKLSAgICAgICAg
cmV0dXJuIG1ha2VVU3RyaW5nKCJcIiIsIGVzY2FwZVF1b3Rlcyh2YWwudG9TdHJpbmcoZXhlYykp
LCAiXCIiKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVU3RyaW5nKCJcIiIsIGVzY2FwZVF1b3Rlcyh2
YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgIlwiIik7CiAKICAgICByZXR1cm4gdmFs
LmRlc2NyaXB0aW9uKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gCiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgIC8vIERvbid0IHB1
dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KLSAgICBJZGVu
dGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlm
aWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgaWYgKCFnbG9iYWxEYXRhLT5leGNlcHRpb24pIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qoc3RyaWN0KTsKICAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwpAQCAtMjU5LDExICsyNTksOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgCiAgICAgQVNTRVJUKCFvcDEuaXNOdW1iZXIoKSB8fCAhb3AyLmlz
TnVtYmVyKCkpOwogICAgIAotICAgIGlmIChvcDEuaXNTdHJpbmcoKSkgewotICAgICAgICBpZiAo
b3AyLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSksIGFzU3RyaW5nKG9wMikpKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBhc1N0cmluZyhvcDEpLCBvcDIudG9Qcmlt
aXRpdmVTdHJpbmcoZXhlYykpKTsKLSAgICB9CisgICAgaWYgKG9wMS5pc1N0cmluZygpICYmICFv
cDIuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBhc1N0cmluZyhvcDEpLCBvcDIudG9TdHJpbmcoZXhlYykpKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNBZGRTbG93Q2FzZShleGVjLCBvcDEsIG9wMikpOwogfQpAQCAtMzA2
LDcgKzMwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAg
ICAgICAgfQogICAgIH0KIAotICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9T
dHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VW
YWx1ZS5nZXQoZXhlYywgaWRlbnQpKTsKIH0KIApAQCAtMzI2LDcgKzMyMyw3IEBAIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMs
IHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHBy
b3BlcnR5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpZGVudCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDMsMTAgKzEzMDMsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
CiAgICAgSlNWYWx1ZSB2MiA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIGlmICh2MS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdjIuaXNTdHJpbmcoKQotICAg
ICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgYXNTdHJpbmcodjIp
KQotICAgICAgICAgICAgOiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgdjIudG9Q
cmltaXRpdmVTdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgaWYgKHYxLmlzU3RyaW5nKCkgJiYgIXYy
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhjYWxsRnJh
bWUsIGFzU3RyaW5nKHYxKSwgdjIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9CkBAIC0yNDYxLDcgKzI0NTksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKICAgICB9CiAgICAgCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1
YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5
KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKQEAgLTI0ODgsNyArMjQ4Niw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWwpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJp
bmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBz
dWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAg
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7CiAgICAgfQogICAg
IApAQCAtMjUxOCw3ICsyNTE2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogICAgICAgICBpZiAoIWlzSlNCeXRlQXJyYXkoYmFzZVZhbHVlKSkKICAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3Jp
cHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7
CiAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7CiAg
ICAgfQogICAgIApAQCAtMjU3OSw3ICsyNTc3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5w
dXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAg
ICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhj
YWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmds
b2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3Ry
aW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJh
c2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMjYyMCw3
ICsyNjE4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsKSk7
CiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0
cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUs
IHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAg
ICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQg
dG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFs
dWUsIHNsb3QpOwpAQCAtMzM4Niw3ICszMzg0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNh
bGxGcmFtZSwgaSkpKTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBwcm9w
TmFtZS50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxG
cmFtZSwgcHJvcE5hbWUudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKSk7CiB9CkBA
IC0zNDk4LDcgKzM0OTYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfCiAgICAgICAgIHJlc3VsdCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleChiYXNlT2JqLCBjYWxsRnJhbWUsIGkpOwogICAgIGVsc2UgewogICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZy
YW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIg
cHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUo
Y2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgcmVz
dWx0ID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgY2Fs
bEZyYW1lLCBwcm9wZXJ0eSk7CiAgICAgfQpAQCAtMzUzOSw3ICszNTM3LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfcmVmZQogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKS50b1N0cmluZyhjYWxsRnJhbWUpOworICAgIFVTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCkudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1l
KTsKICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VO
RCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBp
ZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICBVU3RyaW5nIHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIFVTdHJpbmcgc3RyID0gZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgICAgIHN0ckJ1ZmZlcltrXSA9IHN0ci5pbXBsKCk7CiAgICAgICAgIHRvdGFsU2l6ZSAr
PSBzdHIubGVuZ3RoKCk7CiAgICAgICAgIGFsbFN0cmluZ3M4Qml0ID0gYWxsU3RyaW5nczhCaXQg
JiYgc3RyLmlzOEJpdCgpOwpAQCAtMjcyLDkgKzI3Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
ICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rp
b24sIGNhbGxEYXRhKTsKICAgICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUp
Ci0gICAgICAgICAgICAgICAgc3RyID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpLnRvU3RyaW5nKGV4
ZWMpOworICAgICAgICAgICAgICAgIHN0ciA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3RyID0gZWxlbWVudC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBzdHIgPSBlbGVt
ZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgIHN0ckJ1ZmZlci5h
cHBlbmQoc3RyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5Nyw3ICsyOTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBVU3RyaW5nIHNlcGFyYXRv
cjsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHNl
cGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBzZXBh
cmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAK
ICAgICB1bnNpZ25lZCBrID0gMDsKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CkBAIC0z
MDgsNyArMzA4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICAgICAgICAgIGdvdG8gc2tpcEZpcnN0TG9vcDsKICAgICAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxl
bWVudC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChl
bGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBrKys7CiAg
ICAgICAgIH0KIApAQCAtMzE5LDcgKzMxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKCcsJyk7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAg
ICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKyspIHsKQEAgLTMyOCw3ICszMjgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAgICAgc3RyQnVm
ZmVyLmFwcGVuZChzZXBhcmF0b3IpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9
IGFycmF5LT5nZXRJbmRleChrKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVt
ZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVu
ZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zNDMsNyArMzQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmot
PmdldChleGVjLCBrKTsKICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOwor
ICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJCdWZmZXIu
YnVpbGQoZXhlYykpOwpAQCAtNDI5LDcgKzQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoICsgbiwgZXhlYy0+YXJndW1lbnQobikpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKGV4ZWMsIEpTVmFsdWUoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFi
bGUoKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhlYy0+YXJndW1lbnQobiks
IHNsb3QpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw3IEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHUKICAgICBpZiAocHJvcE5hbWUuZ2V0VUludDMyKGkpKQogICAgICAgICByZXR1cm4gYmFzZU9i
ai0+aGFzUHJvcGVydHkoZXhlYywgaSk7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMs
IHByb3BOYW1lLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMs
IHByb3BOYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmds
b2JhbERhdGEoKS5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
YmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAx
MDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgQ2FsbFR5cGUgRGF0ZUNvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YShKUwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRl
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3Rh
dGUqKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTMgKzE1NCwxMyBA
QCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgICAgYm9vbCB1c2VD
dXN0b21Gb3JtYXQgPSBmYWxzZTsKICAgICBVU3RyaW5nIGN1c3RvbUZvcm1hdFN0cmluZzsKIAot
ICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoYXJnMFN0cmluZyA9PSAiY3VzdG9tIiAmJiAhZXhl
Yy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSkgewogICAgICAgICB1c2VDdXN0b21Gb3JtYXQg
PSB0cnVlOwotICAgICAgICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgxKS50
b1N0cmluZyhleGVjKTsKKyAgICAgICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIH0gZWxzZSBpZiAoZm9ybWF0
ID09IExvY2FsZURhdGVBbmRUaW1lICYmICFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgp
KSB7CiAgICAgICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBk
YXRlU3R5bGUpOwotICAgICAgICB0aW1lU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoZXhlYy0+
YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyksIHRpbWVTdHlsZSk7CisgICAgICAgIHRpbWVTdHls
ZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyksIHRpbWVTdHlsZSk7CiAgICAgfSBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxl
VGltZSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZGF0ZVN0
eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7CiAgICAgZWxz
ZSBpZiAoZm9ybWF0ICE9IExvY2FsZURhdGUgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5oCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE0ICs0MiwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhLCBtZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICAgICAgfQor
CiAgICAgICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobWVzc2FnZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAgICAgRXJyb3JJ
bnN0YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3Rh
bmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5jZShleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgVVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNV
bmRlZmluZWQoKSA/IFVTdHJpbmcoKSA6IG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgYXBwZW5kU291cmNlVG9NZXNzYWdlKCkg
eyByZXR1cm4gbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZXJyb3JQcm90b0YKICAgICBpZiAobmFtZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBu
YW1lU3RyaW5nID0gIkVycm9yIjsKICAgICBlbHNlIHsKLSAgICAgICAgbmFtZVN0cmluZyA9IG5h
bWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIG5hbWVTdHJpbmcgPSBuYW1lLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkBA
IC0xMTgsNyArMTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3Rv
RgogICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcg
PSAiIjsKICAgICBlbHNlIHsKLSAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9TdHJp
bmcoZXhlYyk7CisgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBK
U09iamVjdCogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFCiAgICAgCiBKU09iamVjdCog
Y3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5n
KCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyksICInIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZv
ciAnIiwgb3AsICInIik7CisgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygi
JyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIicgaXMgbm90IGEgdmFsaWQg
YXJndW1lbnQgZm9yICciLCBvcCwgIiciKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+
aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNl
cHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBK
U09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0CiAKIEpTT2JqZWN0KiBjcmVh
dGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLCAiJyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOworICAgIFVTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YyksICInIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRp
b24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4o
ZXhjZXB0aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xMzEsNyArMTMxLDcg
QEAgSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZQogCiBKU09iamVjdCog
Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0
cmluZyhleGVjKSwgIicgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICBVU3RyaW5nIGVycm9yTWVz
c2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
LCAiJyBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uLT5p
c0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2Vw
dGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIEpT
T2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3QKIAogSlNPYmplY3QqIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhl
eGVjKSwgIicgaXMgbm90IGFuIG9iamVjdCIpOworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0g
bWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICInIGlz
IG5vdCBhbiBvYmplY3QiKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvcklu
c3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5z
ZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTcgKzk2LDE3IEBAIEpTT2JqZWN0KiBjb25zdHJ1
Y3RGdW5jdGlvblNraXBwaW5nRXZhbEUKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAgICAg
IHByb2dyYW0gPSAiKGZ1bmN0aW9uKCkgeyBcbn0pIjsKICAgICBlbHNlIGlmIChhcmdzLnNpemUo
KSA9PSAxKQotICAgICAgICBwcm9ncmFtID0gbWFrZVVTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwg
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgIlxufSkiKTsKKyAgICAgICAgcHJvZ3JhbSA9IG1h
a2VVU3RyaW5nKCIoZnVuY3Rpb24oKSB7ICIsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCAiXG59KSIpOwogICAgIGVsc2UgewogICAgICAgICBVU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiKGZ1bmN0aW9uKCIpOwotICAgICAgICBi
dWlsZGVyLmFwcGVuZChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpIC0gMTsgaSsrKSB7CiAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJn
cy5hdChpKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhcmdz
LmF0KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIH0KICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIikgeyAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChh
cmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXJncy5hdChhcmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbn0pIik7CiAgICAgICAgIHByb2dyYW0gPSBidWlsZGVy
LnRvVVN0cmluZygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Qcm8KICAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldExlbmd0aCAtIG51bUJvdW5k
QXJnczsKICAgICB9CiAKLSAgICBJZGVudGlmaWVyIG5hbWUoZXhlYywgdGFyZ2V0LmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50
aWZpZXIgbmFtZShleGVjLCB0YXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5u
YW1lKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdl
dE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCksIGJvdW5kQXJncywgbGVuZ3RoLCBuYW1lKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRp
b24uCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZDsgaSsrKQotICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewogICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2
aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEzICsxNDUsNiBAQCBkb3VibGUgSlNDZWxsOjp0b051
bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTT2Jq
ZWN0Kj4odGhpcyktPnRvTnVtYmVyKGV4ZWMpOwogfQogCi1VU3RyaW5nIEpTQ2VsbDo6dG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIGlmIChpc1N0cmluZygpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dG9TdHJpbmcoZXhl
Yyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTT2JqZWN0Kj4odGhpcyktPnRvU3Ry
aW5nKGV4ZWMpOwotfQotCiBKU09iamVjdCogSlNDZWxsOjp0b09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3Ry
aW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7CiAgICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgY2hhciogZG9Ob3RFc2NhcGUpCiB7Ci0gICAgVVN0cmluZyBzdHIgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCh0
cnVlKTsKKyAgICBDU3RyaW5nIGNzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykudXRmOCh0cnVlKTsKICAgICBpZiAoIWNzdHIuZGF0YSgpKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVVUklFcnJvcihleGVjLCAiU3RyaW5nIGNv
bnRhaW5lZCBhbiBpbGxlZ2FsIFVURi0xNiBzZXF1ZW5jZS4iKSk7CiAKQEAgLTE0Myw3ICsxNDIs
NyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjCiBzdGF0aWMgSlNW
YWx1ZSBkZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkb05vdFVuZXNjYXBlLCBi
b29sIHN0cmljdCkKIHsKICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5n
IHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3Ry
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIAog
ICAgIGlmIChzdHIuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBkZWNvZGUoZXhlYywgc3RyLmNo
YXJhY3RlcnM4KCksIHN0ci5sZW5ndGgoKSwgZG9Ob3RVbmVzY2FwZSwgc3RyaWN0KTsKQEAgLTUx
Myw3ICs1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAg
ICAgaWYgKCF4LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoeCk7
CiAKLSAgICBVU3RyaW5nIHMgPSB4LnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHgu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgaWYgKHMuaXM4Qml0KCkpIHsKICAg
ICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGV4ZWMsIHMuY2hhcmFjdGVyczgo
KSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CkBAIC01NTYsNyArNTU1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIH0KIAogICAgIC8vIElmIFRv
U3RyaW5nIHRocm93cywgd2Ugc2hvdWxkbid0IGNhbGwgVG9JbnQzMi4KLSAgICBVU3RyaW5nIHMg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC01NjUsNyArNTY0
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihwYXJzZUZsb2F0KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjKQpAQCAtNjIzLDcgKzYyMiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICAgICAgIiorLS4vQF8iOwogCiAg
ICAgSlNTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoc3RyLmlzOEJpdCgpKSB7
CiAgICAgICAgIGNvbnN0IExDaGFyKiBjID0gc3RyLmNoYXJhY3RlcnM4KCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBzdHIubGVuZ3RoKCk7IGsrKywgYysrKSB7CkBAIC02NjIs
NyArNjYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFVTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgVVN0cmluZyBzdHIgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpbnQgayA9IDA7
CiAgICAgaW50IGxlbiA9IHN0ci5sZW5ndGgoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB1bndyYXBCb3hlZFBy
aW1pdGkKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjpzX2luZm8pKQog
ICAgICAgICByZXR1cm4ganNOdW1iZXIob2JqZWN0LT50b051bWJlcihleGVjKSk7CiAgICAgaWYg
KG9iamVjdC0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIG9iamVjdC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4g
b2JqZWN0LT50b1N0cmluZyhleGVjKTsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVh
bk9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+dG9QcmltaXRpdmUoZXhl
Yyk7CiAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMjIzLDI1ICsyMjMsMTIgQEAgU3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBVU3RyaW5n
IHByb3BlcnR5TmFtZTsKLSAgICAgICAgICAgIGlmIChuYW1lLmdldFN0cmluZyhleGVjLCBwcm9w
ZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5hbWUuaXNOdW1iZXIo
KSkgewotICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgbmFtZS5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmIChuYW1lLmlzT2JqZWN0
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFzT2JqZWN0KG5hbWUpLT5pbmhlcml0cygmTnVt
YmVyT2JqZWN0OjpzX2luZm8pICYmICFhc09iamVjdChuYW1lKS0+aW5oZXJpdHMoJlN0cmluZ09i
amVjdDo6c19pbmZvKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lID0gbmFtZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXIoZXhlYywgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1f
YXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtODI1LDggKzgxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNP
TlByb3RvRnUKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiSlNPTi5wYXJzZSByZXF1
aXJlcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIikpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBleGVj
LT5hcmd1bWVudCgwKTsKLSAgICBVU3RyaW5nIHNvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE4
LDExICs1MTgsMTEgQEAgZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihFeGVjU3RhdGUqIGV4ZQog
ICAgIHJldHVybiBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiB9CiAKLVVTdHJpbmcgSlNPYmpl
Y3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTU3RyaW5nKiBKU09iamVjdDo6
dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEpTVmFsdWUgcHJpbWl0aXZl
ID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcoZXhlYyk7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMDU2
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFVTdHJpbmcgdG9TdHJp
bmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5n
KiB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICAvLyBOT1RFOiBKU09iamVj
dCBhbmQgaXRzIHN1YmNsYXNzZXMgbXVzdCBiZSBhYmxlIHRvIGdyYWNlZnVsbHkgaGFuZGxlIEV4
ZWNTdGF0ZSogPSAwLAogICAgICAgICAvLyBiZWNhdXNlIHRoaXMgY2FsbCBtYXkgY29tZSBmcm9t
IGluc2lkZSB0aGUgY29tcGlsZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDYg
QEAgZG91YmxlIEpTU3RyaW5nOjp0b051bWJlcihFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBq
c1RvTnVtYmVyKHZhbHVlKGV4ZWMpKTsKIH0KIAotVVN0cmluZyBKU1N0cmluZzo6dG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIHJldHVybiB2YWx1ZShleGVjKTsKLX0KLQog
aW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewogICAg
IFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5n
T2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Nyw3ICsyMTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAg
ICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwotICAgICAgICBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBi
b29sIGdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNDUzLDI0ICs0NTIsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc1RydWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1
bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2UuCiAgICAgfQogCi0gICAgaW5saW5lIFVTdHJp
bmcgSlNWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIGlubGluZSBK
U1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoaXNJbnQzMigp
KQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5h
ZGQoYXNJbnQzMigpKTsKLSAgICAgICAgaWYgKGlzRG91YmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFkZChhc0RvdWJsZSgpKTsKLSAg
ICAgICAgaWYgKGlzVHJ1ZSgpKQotICAgICAgICAgICAgcmV0dXJuICJ0cnVlIjsKLSAgICAgICAg
aWYgKGlzRmFsc2UoKSkKLSAgICAgICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgICAgICBpZiAo
aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotICAgICAgICBpZiAoaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKLSAgICAgICAgQVNTRVJU
KGlzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJuIGFzQ2VsbCgpLT50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICAg
ICAgcmV0dXJuIHRvU3RyaW5nU2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShy
ZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDEwICsyMDQsOSBAQCBib29sIEpTVmFsdWU6Omlz
VmFsaWRDYWxsZWUoKQogICAgIHJldHVybiBhc09iamVjdChhc0NlbGwoKSktPmdsb2JhbE9iamVj
dCgpOwogfQogCi1KU1N0cmluZyogSlNWYWx1ZTo6dG9QcmltaXRpdmVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewotICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CisgICAgQVNTRVJUKCFpc1N0cmluZygp
KTsKICAgICBpZiAoaXNJbnQzMigpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFkZChhc0ludDMy
KCkpKTsKICAgICBpZiAoaXNEb3VibGUoKSkKQEAgLTIyMiwxMCArMjIxLDExIEBAIEpTU3RyaW5n
KiBKU1ZhbHVlOjp0b1ByaW1pdGl2ZVN0cmluZyhFeGUKICAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZWZpbmVkLnVzdHJpbmco
KSk7CiAKICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgIEpTVmFsdWUgdiA9IGFzQ2VsbCgpLT50
b1ByaW1pdGl2ZShleGVjLCBOb1ByZWZlcmVuY2UpOwotICAgIGlmICh2LmlzU3RyaW5nKCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYuYXNDZWxsKCkpOwotICAgIHJl
dHVybiBqc1N0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCB2LnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gYXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmlu
Zyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzT2JqZWN0KCkpOworICAgIHJldHVy
biB2YWx1ZS50b1N0cmluZyhleGVjKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMDU2NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw4ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gdG9OdW1iZXIg
Y29udmVyc2lvbiBpcyBleHBlY3RlZCB0byBiZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2Vw
dGlvbiBoYXMKICAgICAgICAgLy8gYmVlbiBzZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5Lgog
ICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIFVTdHJp
bmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpTU3RyaW5nKiB0b1ByaW1p
dGl2ZVN0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNTdHJpbmcqIHRvU3RyaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OwogCkBAIC0yNDUsNiArMjQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgaW5saW5lIGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0
aGlzOyB9CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlclNsb3dDYXNl
KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1N0cmluZyogdG9TdHJpbmdTbG93Q2FzZShF
eGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRv
T2JqZWN0U2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvVGhpc09iamVjdFNsb3dDYXNlKEV4ZWNT
dGF0ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0Nyw3ICs0NDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
CiAgICAgICAgIHJhZGl4ID0gc3RhdGljX2Nhc3Q8aW50PihyYWRpeFZhbHVlLnRvSW50ZWdlcihl
eGVjKSk7IC8vIG5hbiAtPiAwCiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywganNOdW1iZXIoeCkudG9TdHJpbmcoZXhl
YykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih4KS50b1N0cmlu
ZyhleGVjKSk7CiAKICAgICAvLyBGYXN0IHBhdGggZm9yIG51bWJlciB0byBjaGFyYWN0ZXIgY29u
dmVyc2lvbi4KICAgICBpZiAocmFkaXggPT0gMzYpIHsKQEAgLTQ3NCw3ICs0NzQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgaWYgKCF0b1RoaXNOdW1i
ZXIoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLCB4KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMs
IGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcih4KS50b1N0cmluZyhleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVxdWVzdGVkIHByb3BlcnR5IGRlc2NyaXB0b3Ig
b2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIikpOwotICAgIFVTdHJpbmcgcHJvcGVy
dHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBw
cm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhl
Yy0+YXJndW1lbnQoMCkpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJQcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIGRlZmluZWQgb24gT2JqZWN0cy4iKSk7CiAgICAg
SlNPYmplY3QqIE8gPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgVVN0cmluZyBw
cm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3Ry
aW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0OSw3ICsxNDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRhKGV4ZWMtPmFyZ3VtZW50KDEpLCBjYWxsRGF0YSkg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsICJpbnZhbGlkIGdldHRlciB1c2FnZSIpKTsKLSAgICB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVHZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDEpKSwgMCk7CisgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVm
aW5lR2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1l
bnQoMSkpLCAwKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC0xNjIsNyArMTYyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90bwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YShleGVj
LT5hcmd1bWVudCgxKSwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiaW52YWxpZCBzZXR0
ZXIgdXNhZ2UiKSk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lU2V0dGVy
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpLCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIDApOworICAgIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZVNldHRlcih0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMTcyLDcgKzE3Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3VwR2V0dGVyKGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xODEsMTMgKzE4MSwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBTZXR0
ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cFNldHRl
cihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5wcm9wZXJ0
eUlzRW51bWVyYWJsZShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KSkpKTsKIH0KIAogLy8gMTUuMi40LjMgT2JqZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0NywxMSBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGCiAgICAgSlNWYWx1ZSBwMSA9IHYxLnRvUHJpbWl0
aXZlKGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGNhbGxGcmFt
ZSk7CiAKLSAgICBpZiAocDEuaXNTdHJpbmcoKSkgewotICAgICAgICByZXR1cm4gcDIuaXNTdHJp
bmcoKQotICAgICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwgYXNT
dHJpbmcocDIpKQotICAgICAgICAgICAgOiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAx
KSwganNTdHJpbmcoY2FsbEZyYW1lLCBwMi50b1N0cmluZyhjYWxsRnJhbWUpKSk7Ci0gICAgfQor
ICAgIGlmIChwMS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1l
LCBhc1N0cmluZyhwMSksIHAyLnRvU3RyaW5nKGNhbGxGcmFtZSkpOworCiAgICAgaWYgKHAyLmlz
U3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIGpzU3RyaW5nKGNh
bGxGcmFtZSwgcDEudG9TdHJpbmcoY2FsbEZyYW1lKSksIGFzU3RyaW5nKHAyKSk7CisgICAgICAg
IHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIHAxLnRvU3RyaW5nKGNhbGxGcmFtZSksIGFzU3Ry
aW5nKHAyKSk7CiAKICAgICByZXR1cm4ganNOdW1iZXIocDEudG9OdW1iZXIoY2FsbEZyYW1lKSAr
IHAyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCAr
ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RyaW5nc1tpXS5qc1Zh
bHVlKCk7Ci0gICAgICAgICAgICBpZiAodi5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIHJv
cGVCdWlsZGVyLmFwcGVuZChhc1N0cmluZyh2KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGpzU3RyaW5nKGdsb2JhbERhdGEsIHYudG9TdHJp
bmcoZXhlYykpKTsKKyAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh2LnRvU3RyaW5nKGV4
ZWMpKTsKIAogICAgICAgICAgICAgaWYgKHJvcGVCdWlsZGVyLmxlbmd0aCgpIDwgb2xkTGVuZ3Ro
KSAvLyBUcnVlIGZvciBvdmVyZmxvdwogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CkBAIC05NywyMCArOTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgewogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERh
dGEpOwotCi0gICAgICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJv
cGVCdWlsZGVyLmFwcGVuZChhc1N0cmluZyh0aGlzVmFsdWUpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGpzU3RyaW5nKGdsb2JhbERhdGEsIHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsr
aSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoaSk7Ci0gICAgICAg
ICAgICBpZiAodi5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVu
ZChhc1N0cmluZyh2KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcm9wZUJ1
aWxkZXIuYXBwZW5kKGpzU3RyaW5nKGdsb2JhbERhdGEsIHYudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh2LnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAg
ICAgICAgaWYgKHJvcGVCdWlsZGVyLmxlbmd0aCgpIDwgb2xkTGVuZ3RoKSAvLyBUcnVlIGZvciBv
dmVyZmxvdwogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CkBAIC0zMDAsMTEgKzI5MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAodjEu
aXNOdW1iZXIoKSAmJiB2Mi5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJlcigpKTsKICAgICAgICAgCi0gICAgICAgIGlmICh2
MS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdjIuaXNTdHJpbmcoKQotICAgICAg
ICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIGFzU3RyaW5nKHYy
KSkKLSAgICAgICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2
Mi50b1ByaW1pdGl2ZVN0cmluZyhjYWxsRnJhbWUpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
djEuaXNTdHJpbmcoKSAmJiAhdjIuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBqc1N0
cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgdjIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAK
ICAgICAgICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0dHkgdW5jb21tb24KICAgICAgICAg
cmV0dXJuIGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZWdF
eHBDb25zdHJ1Y3Rvcjo6cHV0KEpTQ2VsbCogY2VsbAogCiB2b2lkIHNldFJlZ0V4cENvbnN0cnVj
dG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRJbnB1dCh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0
KS0+c2V0SW5wdXQodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogdm9p
ZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQpAQCAtMzIzLDEzICszMjMsMTMgQEAgSlNPYmpl
Y3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICByZXR1cm4gYXNPYmpl
Y3QoYXJnMCk7CiAgICAgfQogCi0gICAgVVN0cmluZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5l
ZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcGF0
dGVybiA9IGFyZzAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICBpZiAo
IWFyZzEuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBmbGFncyA9IHJlZ0V4cEZsYWdzKGFyZzEu
dG9TdHJpbmcoZXhlYykpOworICAgICAgICBmbGFncyA9IHJlZ0V4cEZsYWdzKGFyZzEudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxh
Z3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBKU1Zh
bHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4CiBib29sIFJlZ0V4cE9iamVjdDo6
bWF0Y2goRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBD
b25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0
b3IoKTsKLSAgICBVU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBpbnB1dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIGlmICghcmVnRXhwKCktPmdsb2JhbCgpKSB7CiAgICAgICAgIGludCBw
b3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEz
ICsxMTAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkNhbm5vdCBzdXBwbHkgZmxhZ3Mgd2hlbiBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFu
b3RoZXIuIikpOwogICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVnRXhw
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
VVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDog
YXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBp
ZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFn
cyhhcmcxLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3Mo
YXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQpA
QCAtMTUzLDcgKzE1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG8KICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKICAgICBpZiAodGhpc09iamVjdC0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbihleGVj
KSkKICAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7Ci0gICAgVVN0cmluZyBzb3VyY2UgPSB0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwgdXNlICIvKD86KS8iIHRvIGF2b2lkIGNvbGxpZGlu
ZyB3aXRoIGNvbW1lbnQgc3ludGF4CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGV4ZWMsICIvIiwgc291cmNlLmxlbmd0aCgpID8gc291cmNlIDogVVN0
cmluZygiKD86KSIpLCBwb3N0Zml4KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSk7CiAgICAgCi0gICAgSlNTdHJpbmcq
IHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLmlzU3RyaW5nKCkKLSAgICAgICAgPyBhc1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKSkKLSAgICAgICAgOiBqc1N0cmluZyhleGVjLCBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJp
bmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpLCBzdHJpbmcpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5n
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSkKQEAgLTExMSw3ICsxMDgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsCiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOwogfQogCiBDYWxsVHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAx
MDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgc3RhdGljIE5FVkVSX0lOTElO
RSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKLSAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcg
PSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHJlcGxhY2VtZW50U3RyaW5n
ID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgc291
cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwpAQCAtNTAyLDEwICs1MDIsNyBAQCBzdGF0aWMgTkVW
RVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAKICAgICAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHJlc3Vs
dC5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChh
c1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNo
ZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50
cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKS0+
dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU0NywxMCArNTQ0LDcgQEAgc3RhdGlj
IE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogCiAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKExJS0VMWShy
ZXN1bHQuaXNTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBl
bmQoYXNTdHJpbmcocmVzdWx0KS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmco
Y2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNl
bWVudHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVj
KSktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01OTQsNyArNTg4LDcgQEAgc3Rh
dGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGpzTnVtYmVyKGNvbXBsZXRlTWF0Y2hTdGFydCkpOwogICAgICAgICAgICAgICAg
IGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKLSAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBw
ZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZp
bmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpz
VW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02MzMsNyArNjI3LDcgQEAgc3RhdGljIE5F
VkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogc3RhdGljIE5FVkVSX0lOTElORSBFbmNv
ZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBKU1N0
cmluZyoganNTdHJpbmcsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVl
KQogewogICAgIGNvbnN0IFVTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShleGVjKTsK
LSAgICBVU3RyaW5nIHNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtNjUzLDcgKzY0Nyw3IEBAIHN0
YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgVVN0cmluZyBy
ZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcg
cmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NjUsMTIgKzY1OSw5IEBAIHN0YXRpYyBORVZF
Ul9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUu
aXNTdHJpbmcoKSkgewotICAgICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICAgICAgdGhpc1ZhbHVlID0ganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpKTsKLSAgICB9Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5n
KHRoaXNWYWx1ZSk7CisgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBD
aGVja09iamVjdENvZXJjaWJsZQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAg
IEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIHJl
cGxhY2VWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCkBAIC02OTgsNyArNjg5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKQEAgLTcxOCw3ICs3MDks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewpAQCAtNzM5
LDEyICs3MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpICYmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPT0gMSkpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodi5pc1N0cmluZygpCi0gICAgICAgICAgICA/IGpz
U3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIGFzU3RyaW5nKHYpKQotICAgICAgICAg
ICAgOiBqc1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCBqc1N0cmluZygmZXhlYy0+
Z2xvYmFsRGF0YSgpLCB2LnRvU3RyaW5nKGV4ZWMpKSkpOwotICAgIH0KKyAgICBpZiAodGhpc1Zh
bHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUp
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworCiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhleGVjLCB0aGlzVmFsdWUpKTsKQEAgLTc1NSwxMiArNzQz
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwogCiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgx
KTsKLSAgICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1MiA9
IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpbnQgcG9zOwogICAgIGlmIChh
MS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBwb3MgPSAwOwpAQCAtNzg2LDEzICs3NzQsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCi0g
ICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgdTIgPSBhMC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZG91YmxlIGRwb3MgPSBhMS50b0ludGVn
ZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBpZiAoZHBvcyA8IDApCiAgICAgICAgIGRwb3MgPSAw
OwpAQCAtODEwLDcgKzc5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNp
YmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1l
bnQoMCk7CkBAIC04MjUsNyArODEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBl
eHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICogIFBlciBFQ01BIDE1LjEw
LjQuMSwgaWYgYTAgaXMgdW5kZWZpbmVkIHN1YnN0aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAg
ICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyksIE5v
RmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSwgTm9GbGFncyk7CiAgICAgICAgIGlmICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJl
Zy0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICB9CkBAIC04NjIsNyArODUwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTg3Nyw3ICs4NjUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAqICByZXBsYWNl
ZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgog
ICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAuNC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3Rp
dHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhw
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygi
IikgOiBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6
Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIp
IDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdzKTsKICAgICAgICAgaWYg
KCFyZWctPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KQEAg
LTg5Myw3ICs4ODEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYg
KHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTkyNSw3ICs5MTMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKICAgICAvLyAyLiBMZXQgUyBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1
ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNi4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGluIFMuCi0gICAgVVN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKIAogICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IGFycmF5IGNyZWF0ZWQgYXMgaWYgYnkg
dGhlIGV4cHJlc3Npb24gbmV3IEFycmF5KCkKICAgICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUg
c3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0b3Igd2l0aCB0aGF0IG5hbWUuCkBAIC0xMDI3LDcg
KzEwMTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBVU3RyaW5nIHNlcGFy
YXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHNl
cGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAog
ICAgICAgICAvLyA5LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCiAgICAgICAgIGlmICghbGltaXQp
CkBAIC0xMTE0LDcgKzExMDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgICAgIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHVTdHJpbmcgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICBsZW4gPSB1U3RyaW5nLmxlbmd0aCgpOwpAQCAtMTE0NCwyNCArMTEzMiwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaW50
IGxlbjsKLSAgICBKU1N0cmluZyoganNTdHJpbmcgPSAwOwotICAgIFVTdHJpbmcgdVN0cmluZzsK
LSAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAganNTdHJpbmcgPSBzdGF0
aWNfY2FzdDxKU1N0cmluZyo+KHRoaXNWYWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGxlbiA9IGpz
U3RyaW5nLT5sZW5ndGgoKTsKLSAgICB9IGVsc2UgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1
U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICBsZW4gPSB1U3RyaW5nLmxlbmd0aCgpOwotICAgIH0KKworICAgIEpT
U3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNW
YWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIGludCBsZW4gPSBqc1N0cmluZy0+bGVu
Z3RoKCk7CiAKICAgICBkb3VibGUgc3RhcnQgPSBhMC50b051bWJlcihleGVjKTsKICAgICBkb3Vi
bGUgZW5kOwpAQCAtMTE4NSw5ICsxMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIH0KICAgICB1bnNpZ25lZCBzdWJzdHJpbmdTdGFydCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGFydCk7CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgLSBzdWJzdHJpbmdTdGFydDsKLSAgICBpZiAoanNT
dHJpbmcpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywg
anNTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMsIHVTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0
LCBzdWJzdHJpbmdMZW5ndGgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3Ry
aW5nKGV4ZWMsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNh
c2UoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTE5NSw3ICsxMTczLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
Ly8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUuaXNTdHJpbmcoKSA/IGFzU3Ry
aW5nKHRoaXNWYWx1ZSkgOiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykp
OworICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNv
bnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKIAogICAgIGludCBzU2l6ZSA9IHMu
bGVuZ3RoKCk7CkBAIC0xMjE0LDcgKzExOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09i
amVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAg
ICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS5pc1N0cmluZygpID8gYXNTdHJpbmcodGhpc1Zh
bHVlKSA6IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgSlNT
dHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmlu
ZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCiAgICAgaW50IHNTaXplID0gcy5sZW5ndGgoKTsK
QEAgLTEyNTcsMTAgKzEyMzUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2Vy
Y2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+
YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihsb2NhbGVD
b21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIobG9jYWxlQ29tcGFyZShzLCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
QmlnKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEyNjgsNyArMTI0Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4i
LCBzLCAiPC9iaWc+IikpOwogfQogCkBAIC0xMjc3LDcgKzEyNTUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFs
bD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9CiAKQEAgLTEyODYsNyArMTI2NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
PGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsKIH0KIApAQCAtMTI5NSw3ICsxMjczLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKIH0KIApAQCAtMTMwNCw3ICsxMjgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQogCkBAIC0xMzEzLDcgKzEyOTEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxpPiIsIHMsICI8L2k+IikpOwogfQogCkBAIC0xMzIyLDcgKzEzMDAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxz
dHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KIApAQCAtMTMzMSw3ICsxMzA5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7CiB9CiAKQEAgLTEzNDAsNyArMTMxOCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwogfQogCkBAIC0xMzQ5LDkgKzEzMjcsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1c
IiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xv
cj1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+
IikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0Zv
bnRzaXplKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEzNTksNyArMTMzNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVpbnQzMl90IHNtYWxsSW50
ZWdlcjsKQEAgLTEzOTYsNyArMTM3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgaW1wbCkpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3RyaW5n
KGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwgYTAudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSog
ZXhlYykKQEAgLTE0MDQsOSArMTM4Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0
Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVj
LT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIsIHMs
ICI8L2E+IikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
IlwiPiIsIHMsICI8L2E+IikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQxNCw5ICsxMzkyLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIFVTdHJpbmcg
bGlua1RleHQgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGxpbmtUZXh0ID0gYTAu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgbGlua1RleHRTaXpl
ID0gbGlua1RleHQubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RyaW5nU2l6ZSA9IHMubGVuZ3Ro
KCk7CkBAIC0xNDU5LDcgKzE0MzcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdHJpbVN0cmlu
ZyhFeGVjU3RhCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBD
aGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgVVN0cmluZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHVuc2ln
bmVkIGxlZnQgPSAwOwogICAgIGlmICh0cmltS2luZCAmIFRyaW1MZWZ0KSB7CiAgICAgICAgIHdo
aWxlIChsZWZ0IDwgc3RyLmxlbmd0aCgpICYmIGlzVHJpbVdoaXRlc3BhY2Uoc3RyW2xlZnRdKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQg
b2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogSlNVdGlscy5jcHA6CisgICAgICAgIChLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwpOgor
CiAyMDEyLTAxLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IGEgbmV3IGFsbG9jYXRvciBmb3IgYmFja2luZyBzdG9yZXMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIx
NSw3IEBAIENGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNWYWwKIAogICAgICAg
ICBpZiAoaW5WYWx1ZS5pc1N0cmluZygpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFVTdHJpbmcgdVN0cmluZyA9IGluVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAg
ICAgVVN0cmluZyB1U3RyaW5nID0gaW5WYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVVN0cmluZ1RvQ0ZTdHJpbmcodVN0cmluZyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBAQAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJl
dHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2
YWx1ZSgpIGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9t
ICJKUyBzdHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNl
CisgICAgICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9h
cmQ6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Z2V0RGF0YSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVS
SSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnZh
bHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURhdGE6OmFwcGVuZCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Om9wZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2aWNlT3JpZW50YXRp
b25FdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1l
bnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjYWxsSFRNTEFsbENvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBbGxD
b2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZh
c0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVu
dDo6Z2V0Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjppdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZG9jdW1lbnRXcml0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSmF2YVNj
cmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhyZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6
SlNMb2NhdGlvbjo6c2V0SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRI
b3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQb3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBhdGhuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnNldFNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpz
ZXRIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnJlcGxhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6YXNzaWduKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVJbml0TWVz
c2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
U29ja2V0OjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpjbG9zZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXb3JrZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpldmVudExpc3RlbmVySGFuZGxlckJvZHkpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZh
bHVlOjp0b1N0cmluZyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG06CisgICAgICAgIChHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsKToKKyAgICAgICAgKEpT
VmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6
CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9q
c29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0
KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuY3BwOgorICAgICAgICAoSmF2YUZpZWxkOjpkaXNw
YXRjaFZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6dmFsdWVGcm9tSW5z
dGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSk6
CisgICAgICAgIChKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6
aW52b2tlTWV0aG9kKToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW50ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzKToKKwogMjAxMi0wMS0yMyAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSB1bml0ZUlmTm9uWmVybyB0byB1c2UgaXNaZXJvLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFBhc3NSZWZQdHI8
SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQog
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihleGVjKSk7CiAgICAg
aWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1c3Ry
aW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgogICAgIHJldHVybiAwOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnB1
dERlbGVnYXRlKAogCiBKU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlD
U1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7Cisg
ICAgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJv
YXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlCiAgICAgfQogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgIGNsaXBib2FyZC0+Y2xlYXJEYXRhKHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgICAgICBjbGlwYm9h
cmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIApAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpnZXREYXRhKEV4ZWNT
dGF0ZSogCiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKICAgICBib29sIHN1
Y2Nlc3M7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBzdWNjZXNzKTsKKyAgICBT
dHJpbmcgcmVzdWx0ID0gY2xpcGJvYXJkLT5nZXREYXRhKHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBzdWNjZXNzKTsKICAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcg
QEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogICAgICAgICByZXBv
cnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXJldHZh
bC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gdXN0cmluZ1RvU3Ry
aW5nKHJldHZhbC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICByZXN1bHQgPSB1c3RyaW5n
VG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQogCiAg
ICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDEwNTY0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhFeGVjU3QKIHsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiB9CiAKIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiB1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiB1c3RyaW5n
VG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogSlNWYWx1
ZSBqc0RhdGVPck51bGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCkBAIC0xNTEsMTAg
KzE1MSwxMCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAg
aWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9iamVjdCA9IGV4Y2VwdGlv
bi50b09iamVjdChleGVjKTsKICAgICBpbnQgbGluZU51bWJlciA9IGV4Y2VwdGlvbk9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSkudG9JbnQzMihleGVjKTsKLSAgICBV
U3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIGlmIChFeGNlcHRpb25CYXNlKiBleGNlcHRp
b25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2VwdGlvbikpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE1ICs2MCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTRE9NRm9ybURhCiBKU1ZhbHVlIEpTRE9NRm9ybURhdGE6OmFwcGVuZChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7
Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmco
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodmFsdWUuaW5o
ZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkgewogICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lOwog
ICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzICYmICFleGVjLT5hcmd1
bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICBmaWxlbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQo
bmFtZSwgdG9CbG9iKHZhbHVlKSwgZmlsZW5hbWUpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhl
eGVjKSkpOworICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwgdXN0cmluZ1RvU3RyaW5n
KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
dHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6OmRlbGV0ZVByb3BlcnR5
KEpTQ2UKIAogYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpCiB7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB1c3RyaW5nVG9T
dHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDcgKzQ2
Miw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSoKICAgICB9CiAj
ZW5kaWYKIAotICAgIFVTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC01MTIsNyArNTEyLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3Rh
dGUqIGV4ZQogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEF0b21pY1N0
cmluZyBmcmFtZU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8g
Il9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBleGVjLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmco
ZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwpAQCAtNjc5LDcgKzY3OSw3IEBA
IEpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoRXgKICAgICBpZiAoIWxpc3Rl
bmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1w
bCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGV4ZWMtPmFyZ3VtZW50
KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJp
bmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
ZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02OTMsNyArNjkzLDcg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAgIGlmICghbGlz
dGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBp
bXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmpl
Y3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgZXhl
Yy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50
TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2
aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50
ZXJ2YWwoRXgKIAogSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2aWNlTW90aW9u
RXZlbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3Qg
U3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgYm9vbCBidWJibGVzID0gZXhlYy0+YXJndW1lbnQo
MSkudG9Cb29sZWFuKGV4ZWMpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV4ZWMtPmFyZ3VtZW50
KDIpLnRvQm9vbGVhbihleGVjKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9y
aWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBA
IEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphYnNvbHUKIAogSlNWYWx1ZSBKU0Rl
dmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZpY2VPcmllbnRhdGlvbkV2ZW50KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihl
eGVjKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
ZXhlYyk7CiAgICAgLy8gSWYgYWxwaGEsIGJldGEgb3IgZ2FtbWEgYXJlIG51bGwgb3IgdW5kZWZp
bmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAog
dm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFN0cmluZyYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgcmVzdWx0ID0gdXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpj
b252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBTY3JpcHRWYWx1ZSYg
cmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiAKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc3RyID0gdXN0cmluZ1RvU3RyaW5nKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyID0gdXN0cmluZ1RvU3RyaW5nKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBGcmFtZSogbGV4aWNhbEZy
YW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCkt
PmZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICAgICAgICAg
IHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9yZXNSZXN1
bHRBc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdCh1c3RyaW5n
VG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgZXZlbnQt
PnN0b3JlUmVzdWx0KHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAobV9pc0F0dHJpYnV0ZSkgewogICAgICAgICAgICAg
ICAgIGlmIChyZXR2YWwuaXNGYWxzZSgpKQogICAgICAgICAgICAgICAgICAgICBldmVudC0+cHJl
dmVudERlZmF1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFs
bENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7
CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAgICAg
ICAgIGJvb2wgb2s7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IElkZW50aWZpZXI6OnRvVUludDMyKHN0cmluZywgb2spOwogICAgICAgICBpZiAob2spCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5n
bG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aXRlbShpbmRleCkpKTsKQEAgLTgzLDggKzgzLDgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gVGhl
IHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQKICAg
ICBib29sIG9rOwotICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgb2spOworICAgIFVTdHJpbmcgc3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIHVuc2ln
bmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKSB7CiAgICAgICAgIGlmIChO
b2RlKiBub2RlID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtV2l0aEluZGV4KHVzdHJpbmdUb0F0b21p
Y1N0cmluZyhzdHJpbmcpLCBpbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgbm9kZSkpOwpAQCAt
MTEzLDE1ICsxMTMsMTUgQEAgSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVy
KAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICB1aW50MzJfdCBpbmRl
eCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVybiBnZXRO
YW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJ
ZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRl
bnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJl
dHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZh
c0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1Zh
bHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KGltcGwoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFJlZlB0
cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAg
IGlmIChjb250ZXh0SWQgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgY29udGV4dElkID09ICJ3
ZWJraXQtM2QiKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDE1ICs3MiwxNSBAQCBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Om5hbWVH
ZXR0ZXIoRXhlCiBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGJvb2wgb2s7Ci0gICAgdWludDMyX3QgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJ
bnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgb2spOworICAgIHVpbnQzMl90
IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKQogICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLT5pdGVtKGluZGV4KSk7Ci0gICAgcmV0dXJu
IGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRo
aXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJ
ZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAg
cmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRN
TENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNiwxNCArMTM2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkb2N1
bWVudFdyaXRlKEV4ZWNTdGEKIAogICAgIHNpemVfdCBzaXplID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpOwogCi0gICAgVVN0cmluZyBmaXJzdFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgU2VnbWVudGVkU3RyaW5nIHNlZ21lbnRl
ZFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhmaXJzdFN0cmluZyk7CiAgICAgaWYgKHNpemUgIT0g
MSkgewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICBzZWdtZW50ZWRTdHJpbmcuY2xl
YXIoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJp
bmcgc3Vic2VxdWVudFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21l
bnRlZFN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc3Vic2VxdWVudFN0cmluZykpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
SW5wdXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSlNIVE1MSW5wdXRFbGVtZW50
OjpzZXRTZWxlY3Rpb25EaXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlucHV0LT5z
ZXRTZWxlY3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgaW5wdXQtPnNldFNlbGVjdGlvbkRpcmVjdGlvbih1c3RyaW5nVG9TdHJpbmcodmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC05Nyw3ICs5
Nyw3IEBAIEpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb24KIAogICAgIGlu
dCBzdGFydCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAgaW50IGVuZCA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgU3RyaW5nIGRpcmVjdGlvbiA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CisgICAg
U3RyaW5nIGRpcmVjdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgaW5wdXQtPnNldFNlbGVjdGlvblJhbmdl
KHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0
b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIEpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDb24KICAgICAgICAgaWYgKCF0eXBlLmlzU3RyaW5nKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgdHlwZVN0cmluZyA9IHVzdHJpbmdUb1N0cmlu
Zyh0eXBlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIHR5cGVTdHJpbmcgPSB1c3Ry
aW5nVG9TdHJpbmcodHlwZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBp
ZiAodHlwZVN0cmluZyA9PSAic2VwYXJhdG9yIikgewogICAgICAgICAgICAgaXRlbXMuYXBwZW5k
KG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbUN1c3RvbVRhZ05vQWN0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCkp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvbnRleHRNZW51QWN0aW9uIHR5cGVk
SWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oQ29udGV4dE1lbnVJdGVtQmFzZUN1
c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
KiBtZW51SXRlbSA9IG5ldyBDb250ZXh0TWVudUl0ZW0oKHR5cGVTdHJpbmcgPT0gImNoZWNrYm94
IiA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlKSwgdHlwZWRJZCwgdXN0cmluZ1Rv
U3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICBDb250ZXh0TWVudUl0
ZW0qIG1lbnVJdGVtID0gbmV3IENvbnRleHRNZW51SXRlbSgodHlwZVN0cmluZyA9PSAiY2hlY2ti
b3giID8gQ2hlY2thYmxlQWN0aW9uVHlwZSA6IEFjdGlvblR5cGUpLCB0eXBlZElkLCB1c3RyaW5n
VG9TdHJpbmcobGFiZWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAg
ICBpZiAoIWVuYWJsZWQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICBtZW51SXRlbS0+
c2V0RW5hYmxlZChlbmFibGVkLnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAgICAgICBpZiAoIWNo
ZWNrZWQuaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbCgpLT5ldmFsdWF0ZShleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgZXhj
ZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS0+ZXZhbHVhdGUoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBleGNlcHRpb24pOwogCiAgICAg
aWYgKGV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBleGNlcHRpb24pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBKU0xv
Y2F0aW9uOjpkZWZpbmVHZXR0ZXIoSlNPYmplY3QqIAogCiB2b2lkIEpTTG9jYXRpb246OnNldEhy
ZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgaHJlZiA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaHJlZiA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhyZWYodXN0cmluZ1RvU3RyaW5nKGhyZWYpLCBh
Y3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTE4Nyw3ICsx
ODcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjCiAKIHZvaWQg
SlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFVTdHJpbmcgcHJvdG9jb2wgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3Ry
aW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9j
b2woRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhvc3QgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIGhvc3QgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbCgpLT5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyhob3N0KSwgYWN0aXZlRE9NV2luZG93KGV4
ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBKU0xv
Y2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpTTG9jYXRpb246OnNldEhv
c3RuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhv
c3RuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBob3N0bmFtZSA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhvc3RuYW1lKHVzdHJpbmdU
b1N0cmluZyhob3N0bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3co
ZXhlYykpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUo
RXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBvcnQgPSB2YWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHBvcnQgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bCgpLT5zZXRQb3J0KHVzdHJpbmdUb1N0cmluZyhwb3J0KSwgYWN0aXZlRE9NV2luZG93KGV4ZWMp
LCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBKU0xvY2F0
aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhu
YW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBhdGhu
YW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldFBhdGhuYW1lKHVzdHJpbmdUb1N0
cmluZyhwYXRobmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhl
YykpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUoRXhl
Y1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwoKS0+c2V0U2VhcmNoKHVzdHJpbmdUb1N0cmluZyhwYXRobmFtZSksIGFjdGl2ZURP
TVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjM3LDcgKzIzNyw3IEBA
IHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXgKIAogdm9pZCBKU0xvY2F0
aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3Ry
aW5nIGhhc2ggPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGhhc2ggPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIYXNoKHVzdHJpbmdUb1N0cmlu
ZyhoYXNoKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBA
IC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhl
YwogCiBKU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlcGxhY2UodXN0cmluZ1RvU3RyaW5nKHVy
bFN0cmluZyksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpA
QCAtMjYwLDcgKzI2MCw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSog
ZXgKIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPmFzc2lnbih1c3RyaW5nVG9TdHJpbmcodXJs
U3RyaW5nKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMSArMTAy
LDExIEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEV4ZWNTdGF0ZSoKIAogc3RhdGlj
IEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KEpTTWVzc2FnZUV2ZW50KiBqc0V2
ZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBVU3RyaW5nJiB0eXBlQXJn
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYg
dHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVj
KTsKICAgICBib29sIGNhbmNlbGFibGVBcmcgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
ZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhlYy0+YXJndW1lbnQoNCku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgbGFzdEV2ZW50SWRBcmcgPSBleGVj
LT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBvcmlnaW5B
cmcgPSBleGVjLT5hcmd1bWVudCg0KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAg
Y29uc3QgVVN0cmluZyYgbGFzdEV2ZW50SWRBcmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgRE9NV2luZG93KiBzb3VyY2VBcmcgPSB0b0RPTVdp
bmRvdyhleGVjLT5hcmd1bWVudCg2KSk7CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IG1l
c3NhZ2VQb3J0czsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDcpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhl
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmluZyBzcWxT
dGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkBAIC04MSw3ICs4
MSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAg
ICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJp
bmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgc3FsVmFs
dWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0
aW9uU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3Fs
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmluZyBzcWxT
dGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkBAIC04MCw3ICs4
MCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwKICAgICAgICAg
ICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJp
bmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgc3FsVmFs
dWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTAgKzYyLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNTaGFyZWRXb3IKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0gICAgVVN0
cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBVU3RyaW5nIG5hbWU7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDEpCi0gICAgICAgIG5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGUK
ICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcg
KzI0MSw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGUKICAgICAg
ICAgcmV0dXJuIHRocm93U3ludGF4RXJyb3IoZXhlYyk7CiAKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBs
KCkpOwotICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC0+Z2V0RXh0ZW5z
aW9uKG5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJTb2NrZXQKICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CiAKLSAg
ICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJ3cm9uZyBVUkwiKSk7CiAgICAgUmVmUHRyPFdlYlNvY2tl
dD4gd2ViU29ja2V0ID0gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7CkBAIC03MywxNCArNzMs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9j
b2xzQXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNBcnJh
eS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgIFN0cmluZyBw
cm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNBcnJheS0+Z2V0SW5kZXgoaSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1cmxTdHJpbmcs
IHByb3RvY29scywgZWMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIHBy
b3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKHByb3RvY29sc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1cmxTdHJpbmcsIHBy
b3RvY29sLCBlYyk7CkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2Vu
ZChFeGVjU3RhdGUqIGV4ZQogICAgIGVsc2UgaWYgKG1lc3NhZ2UuaW5oZXJpdHMoJkpTQmxvYjo6
c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHRvQmxvYihtZXNzYWdlKSwg
ZWMpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgc3RyaW5nTWVzc2FnZSA9IHVzdHJpbmdU
b1N0cmluZyhtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ01l
c3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmcobWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHN0cmluZ01l
c3NhZ2UsIGVjKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBKU1ZhbHVlIEpTV2ViU29ja2V0OjpjbG9z
ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICB4ID0gY2xhbXBUbyh4LCBtaW5WYWx1ZSwgbWF4
VmFsdWUpOwogICAgICAgICBjb2RlID0gY2xhbXBUb0ludGVnZXIoeCk7CiAgICAgICAgIGlmIChh
cmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgICAgIHJlYXNvbiA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICByZWFzb24g
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAg
ICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250
ZXh0OjppbXBvcnRTY3JpcHRzKEUKIAogICAgIFZlY3RvcjxTdHJpbmc+IHVybHM7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAg
ICAgIHVybHMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudChpKS50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICB1cmxzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5j
cHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVTdHJpbmcgc2NyaXB0VVJM
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzY3JpcHRV
UkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODUsOCArODUsOCBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
RXhlY1N0YXRlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIpKTsKIAotICAgIGNvbnN0IEtVUkwmIHVybCA9IGltcGwoKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5jb21wbGV0ZVVSTCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBTdHJpbmcgbWV0aG9kID0gdXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1
cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwodXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OworICAgIFN0cmluZyBtZXRob2QgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewpAQCAtMTI5LDcgKzEyOSw3
IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICAgICAgZWxz
ZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8pKQogICAgICAgICAgICAg
aW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFsKSwgZWMpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBpbXBsKCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50b1N0cmluZyhleGVjKSks
IGVjKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh1c3RyaW5nVG9TdHJpbmcodmFsLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGVjKTsKICAgICB9CiAKICAgICBpbnQgc2lnbmVkTGlu
ZU51bWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nv
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
U0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksOSArODksOSBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4
CiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgZXhl
Yy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBT
dHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIHZhbHVlID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgaW1wbCgpLT5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIHZh
bHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTEwMCw4ICsxMDAsOCBAQCBK
U1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4CiB7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmlu
ZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgU3RyaW5nIHZhbHVlID0gaW1wbCgpLT5nZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2Nh
bE5hbWUpOwogICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKIH0K
QEAgLTExMCw4ICsxMTAsOCBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1l
dGVyCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0
cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcg
bG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaW1wbCgpLT5yZW1vdmVQYXJhbWV0ZXIobmFtZXNwYWNl
VVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lv
biAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NPd25QdHI8U2NoZWR1bGVk
QWN0aW9uPiBTY2hlZHVsZWRBY3QKICAgICBpZiAoZ2V0Q2FsbERhdGEodiwgY2FsbERhdGEpID09
IENhbGxUeXBlTm9uZSkgewogICAgICAgICBpZiAocG9saWN5ICYmICFwb2xpY3ktPmFsbG93RXZh
bCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5n
ID0gdi50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHJpbmcgPSB2LnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
U2NoZWR1bGVkQWN0aW9uKHVzdHJpbmdUb1N0cmluZyhzdHJpbmcpLCBpc29sYXRlZFdvcmxkKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExp
c3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
OCBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3VtZW50CiAgICAgSlNDOjpK
U09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwog
ICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiB1c3Ry
aW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3RhdGVGcm9tTm9kZShqc0xp
c3RlbmVyLT5pc29sYXRlZFdvcmxkKCksIGRvY3VtZW50KSkpOworICAgIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbU5vZGUoanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3Js
ZCgpLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhqc0Z1bmN0aW9uLT50
b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKSk7CiB9CiAKIGJvb2wgZXZl
bnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXIsIFN0cmluZyYgc291cmNlTmFtZSwgaW50JiBsaW5lTnVtYmVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0
cmluZyhTY3JpcHRTdGF0ZSoKIAogU3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHVzdHJpbmdU
b1N0cmluZyhtX3ZhbHVlLmdldCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRlKSk7CisgICAgU3RyaW5n
IHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyhtX3ZhbHVlLmdldCgpLnRvU3RyaW5nKHNjcmlwdFN0
YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpKTsKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
YW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9raW5nIHRvU3RyaW5nIG9uIHRo
ZSBvYmplY3QuCiAgICAgaWYgKHNjcmlwdFN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
c2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTA1NjQ0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBFTkQKICAgICBKU1ZhbHVlIGxpc3Rl
bmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwt
PiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNP
YmplY3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVj
KSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykp
OworICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWlj
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgJHdyYXBwZXJPYmplY3Qs
IGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQdHJIYW5kbGluZywgZXhlYy0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogRU5ECiAgICAgcmV0dXJuIEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBs
OwpAQCAtMjkxMiw3ICsyOTEyLDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIGlmICgkdHlw
ZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9IHx8ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJSZWZsZWN0In07CiAgICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZyJ9OwotICAgICAg
ICByZXR1cm4gInVzdHJpbmdUb1N0cmluZygkdmFsdWUuaXNFbXB0eSgpID8gVVN0cmluZygpIDog
JHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSI7CisgICAgICAgIHJldHVybiAidXN0cmluZ1RvU3RyaW5n
KCR2YWx1ZS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiAkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CkBA
IC0zNDkyLDcgKzM0OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3Ry
dWN0CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25zdHJ1Y3RvciBhc3NvY2lh
dGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgQXRvbWljU3Ry
aW5nIGV2ZW50VHlwZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSk7CisgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHVzdHJpbmdUb0F0
b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rl
c3RiaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3Ri
aW5kaW5ncy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90
ZXN0YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAgICAgICAgICAgICAgICAgICAg
IFZhbHVlIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBjaGFyICpt
c2cgPSBleFZhbC50b1N0cmluZyhleGVjKS5hc2NpaSgpOworICAgICAgICAgICAgICAgICAgICBj
aGFyKiBtc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKTsKICAg
ICAgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IC0xOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoZXhWYWwudHlwZSgpID09IE9iamVjdFR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlIGxpbmVWYWwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFsKS5nZXQoZXhlYyxJZGVu
dGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RxdGJpbmRp
bmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvdGVzdHF0YmluZGlu
Z3MuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvdGVzdHF0
YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgaWYgKGNvbXAuY29tcGxUeXBlKCkg
PT0gVGhyb3cpIHsKICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAiZXhjZXB0aW9uIHRocm93
biI7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSogZXhWYWwgPSBjb21wLnZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCk7Cisg
ICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKS5hc2NpaSgpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8gPSAtMTsKICAgICAgICAg
ICAgICAgICBpZiAoZXhWYWwtPnR5cGUoKSA9PSBPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUqIGxpbmVWYWwgPSBleFZhbC0+Z2V0T2JqZWN0KCktPmdldChleGVjLCBJ
ZGVudGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGls
aXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHku
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxp
dHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgY29udmVydFZhbHVl
VG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsK
IAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIENTdHJpbmcgY3N0cmluZyA9IHVz
dHJpbmcudXRmOCgpOwogICAgICAgICBOUFN0cmluZyBzdHJpbmcgPSB7IChjb25zdCBOUFVURjgq
KWNzdHJpbmcuZGF0YSgpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3N0cmluZy5sZW5ndGgoKSkg
fTsKICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkocmVzdWx0LCAm
c3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1t
CShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg4LDcgKzQ4OCw3IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3
T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRvdWJsZSl2YWx1ZS50b051
bWJlcihleGVjKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwogICAgICAgICByZXN1
bHQgPSBlbnYtPk5ld1N0cmluZyAoKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUuY2hhcmFjdGVy
cygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xl
YW4oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVBy
aXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pO
SVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAg
ICAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0udG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBlbnYtPlNldE9iamVjdEFycmF5RWxl
bWVudChqYXJyYXksIGksCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+
TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBz
dHJpbmdWYWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTk4LDcgKzk4LDcg
QEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICAgICAg
amFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShsZW5ndGgpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAg
ICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAg
ICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICAgICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAg
aWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCgpID4gMCkKICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSAoKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCkpWzBdOwpAQCAtMjQ5LDcg
KzI0OSw3IEBAIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGUKICAgICAg
ICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIG51bGwuCiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJpbmciKSkgewogICAg
ICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
VVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwog
ICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+
TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCksIHN0
cmluZ1ZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZh
U3RyaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlND
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmll
bGRKU0MuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L2pzYy9KYXZhRmllbGRKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGp2
YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAgICAgICAgICAgICAgICBh
cmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4
ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJl
dHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAg
ICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDcs
NyArMTQ3LDcgQEAgSlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnZh
bHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSku
dXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UgZ2V0dGlu
ZyAlcyA9ICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBqc3Jlc3Vs
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgcmV0
dXJuIGpzcmVzdWx0OwogfQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgSmF2YUZpZWxkOjpkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW4KICAgICAgICAgICAgICAgICBhcmdzWzFdID0gamF2YVZhbHVl
OwogICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRp
dmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCBKYXZhVHlwZVZvaWQsIG1pZCwgYXJn
cywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgaWYg
KGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBK
YXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGNvbnN0IEphdmFJbnN0YW5j
ZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UqPihpKTsKICAgICBq
dmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgaS0+cm9vdE9iamVj
dCgpLCBhVmFsdWUsIG1fdHlwZSwgdHlwZUNsYXNzTmFtZSgpKTsKIAotICAgIExPRyhMaXZlQ29u
bmVjdCwgIkphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNldHRpbmcgdmFsdWUgJXMgdG8g
JXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCksIGFWYWx1ZS50b1N0cmlu
ZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxk
OjpzZXRWYWx1ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFt
ZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKS5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
SmF2YVR5cGVBcnJheToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk0LDcgKzE5NCw3IEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1MK
ICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBDU3RyaW5nIGphdmFD
bGFzc05hbWUgPSBqTWV0aG9kLT5wYXJhbWV0ZXJBdChpKS51dGY4KCk7CiAgICAgICAgIGpBcmdz
W2ldID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgbV9yb290T2JqZWN0LmdldCgpLCBleGVj
LT5hcmd1bWVudChpKSwgamF2YVR5cGVGcm9tQ2xhc3NOYW1lKGphdmFDbGFzc05hbWUuZGF0YSgp
KSwgamF2YUNsYXNzTmFtZS5kYXRhKCkpOwotICAgICAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZh
SW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBleGVjLT5hcmd1bWVudChp
KS50b1N0cmluZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhMaXZlQ29ubmVj
dCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAlcyIsIGksIGV4ZWMtPmFy
Z3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpLmRhdGEoKSk7CiAg
ICAgfQogCiAgICAganZhbHVlIHJlc3VsdDsKQEAgLTIxNCw3ICsyMTQsNyBAQCBKU1ZhbHVlIEph
dmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAgICAgICAgIGptZXRob2RJRCBtZXRob2RJ
ZCA9IGdldE1ldGhvZElEKG9iaiwgak1ldGhvZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGpNZXRo
b2QtPnNpZ25hdHVyZSgpKTsKICAgICAgICAgaGFuZGxlZCA9IGRpc3BhdGNoSk5JQ2FsbChleGVj
LCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9kLT5pc1N0YXRpYygpLCBq
TWV0aG9kLT5yZXR1cm5UeXBlKCksIG1ldGhvZElkLCBqQXJncy5kYXRhKCksIHJlc3VsdCwgY2Fs
bGluZ1VSTCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uRGVz
Y3JpcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDcgKzM0Myw3IEBAIFFWYXJp
YW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKHN0ci5sZW5ndGgoKSA/ICoo
Y29uc3QgdXNob3J0KilzdHIuaW1wbCgpLT5jaGFyYWN0ZXJzKCkgOiAwKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsK
QEAgLTM1OCw3ICszNTgsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNT
dGF0CiAgICAgICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIFFTdHJpbmcoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
VVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAg
VVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5n
LmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKQEAg
LTQzOSw3ICs0MzksNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0
CiAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwogICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQo
ZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBx
c3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocXN0cmluZyk7CkBAIC00NTMsNyArNDUzLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9R
VmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmlu
ZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVu
Z3RoKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CkBA
IC00NjIsNyArNDYyLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3Rh
dAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNv
bnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgp
KTsKICAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCBRVmFyaWFudCBjb252
ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlh
bnQoUUJ5dGVBcnJheShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhcnItPmRhdGEoKSks
IGFyci0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFT
dHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5n
Lmxlbmd0aCgpKS50b0xhdGluMSgpKTsKICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJp
bmcpCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwpAQCAtNTIxLDcgKzUyMSw3IEBAIFFW
YXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgICAgICAgICB9
CiAjaWZuZGVmIFFUX05PX0RBVEVTVFJJTkcKICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5n
ID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVz
dHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBl
OjpRRGF0ZVRpbWUpIHsKQEAgLTU3MSw3ICs1NzEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgUmVnRXhwT2JqZWN0ICpyZSA9IHN0
YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KG9iamVjdCk7CiAqLwogICAgICAgICAgICAgICAgIC8v
IEF0dGVtcHQgdG8gY29udmVydC4uIGEgYml0IHJpc2t5Ci0gICAgICAgICAgICAgICAgVVN0cmlu
ZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmlu
ZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAg
ICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmlt
cGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgb2YgdGhlIGZvcm0gJy94eHh4eHgvaScKQEAgLTU5MSw3ICs1OTEsNyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAg
ICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyByZWdleHAiOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKLSAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29u
c3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkp
OwogCiAgICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKQEAgLTE1OTksNyArMTU5
OSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc09iajsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBzdHJp
bmcKLSAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgZnVuY05hbWUgPSBleGVjLT5hcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcg
ZnVuY05hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJZGVudChleGVjLCBmdW5j
TmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBEcm9wQWxsTG9ja3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3Bw
CShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJu
YWxzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTSW50
ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhCiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3Vh
Z2VzOwogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBs
YW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhl
YykpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB1c3RyaW5nVG9TdHJpbmcoYXJyYXktPmdl
dEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGxhbmd1YWdl
cy5hcHBlbmQobGFuZ3VhZ2UpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEwNTY0NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIGEgSlNTdHJp
bmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxsIHZhbHVlKCkgYWZ0ZXIg
Y2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZyb20gIkpTIHN0cmluZyIg
KEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2luY2UKKyAgICAgICAgdG9T
dHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQp
OgorCiAyMDEyLTAxLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAog
ICAgICAgICBNYWtlIFdlYktpdDIgcmVtZW1iZXIgdGhlIGhlaWdodCBvZiB0aGUgV2ViIEluc3Bl
Y3RvciB3aGVuIGl0IGlzIGRvY2tlZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYzLDcgKzE2Myw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVQK
ICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBOUFN0cmluZyBu
cFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKSk7Cisg
ICAgICAgIE5QU3RyaW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKSk7CiAgICAgICAgIFNUUklOR05fVE9fTlBWQVJJQU5U
KG5wU3RyaW5nLlVURjhDaGFyYWN0ZXJzLCBucFN0cmluZy5VVEY4TGVuZ3RoLCB2YXJpYW50KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEw
NTY0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIGEgSlNTdHJp
bmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxsIHZhbHVlKCkgYWZ0ZXIg
Y2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZyb20gIkpTIHN0cmluZyIg
KEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2luY2UKKyAgICAgICAgdG9T
dHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4KKworICAgICAgICAqIFBs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6
d2l0aEdsb2JhbE9iamVjdDppblNjcmlwdFdvcmxkOl0pOgorCiAyMDEyLTAxLTIwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBXZWJDb3JlIFJ1bkxvb3Agd29y
ayBmb3IgV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU4LDcgKzEyNTgsNyBA
QCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsCiAKICAgICBpZiAodmFs
dWUuaXNTdHJpbmcoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1i
ZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlwZV1dOwotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSldOworICAgICAgICBbYXJyYXkgYWRk
T2JqZWN0OnVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
XTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpEb3VibGVWYWx1ZVR5cGVdXTsKICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS50b051
bWJlcihleGVjKV1dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShy
ZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEzLDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcgogICAgICAgICByZXR1cm4gQCIiOwogCiAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJl
c3VsdC50b1N0cmluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7CisgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIHJldHVybiB1c3Ry
aW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIC0g
KE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgUG9zaXRpb24mKXBvcyBhZmZpbml0
eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQpAQCAtMTE5MSw3ICsxMTkyLDggQEAgLSAo
TlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgICAgICByZXR1cm4gQCIi
OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICByZXR1cm4g
dXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhhbnlXb3JsZEdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBhbnlXb3JsZEdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilf
Z2xvYmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123644</attachid>
            <date>2012-01-23 15:56:04 -0800</date>
            <delta_ts>2012-01-23 16:22:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123155602.patch</filename>
            <type>text/plain</type>
            <size>149336</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IGJ1aWxkIGFmdGVyIHIxMDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxMyArNTY3LDEzIEBAIF9f
Wk5LM0pTQzE5U291cmNlUHJvdmlkZXJDYWNoZThieXRlU2l6ZUUKIF9fWk5LM0pTQzZKU0NlbGwx
MXRvUHJpbWl0aXZlRVBOU185RXhlY1N0YXRlRU5TXzIyUHJlZmVycmVkUHJpbWl0aXZlVHlwZUUK
IF9fWk5LM0pTQzZKU0NlbGw4dG9OdW1iZXJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M2SlND
ZWxsOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RQotX19aTksz
SlNDNkpTQ2VsbDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0
U3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlF
eGVjU3RhdGVFUk5TXzdVU3RyaW5nRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8K
IF9fWk5LM0pTQzdKU0FycmF5MTJzdWJjbGFzc0RhdGFFdgogX19aTkszSlNDN0pTVmFsdWUxNnRv
TnVtYmVyU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9PYmpl
Y3RTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKK19fWk5LM0pT
QzdKU1ZhbHVlMTZ0b1N0cmluZ1Nsb3dDYXNlRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0pT
VmFsdWUxOXN5bnRoZXNpemVQcm90b3R5cGVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTIwdG9UaGlzT2JqZWN0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJpCiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwog
Ci0gICAgICAgIHByaW50ZigiJXMiLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBw
dXRjaGFyKCdcbicpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRlYnVnKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xu
IiwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudXRmOCgpLmRhdGEoKSk7CisgICAg
ZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBW
ZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7
CkBAIC0yOTQsNyArMjk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwpAQCAtMzEwLDcgKzMxMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBu
b3Qgb3BlbiBmaWxlLiIpKSk7CkBAIC00ODcsOSArNDg3LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0
aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGR1bXApIHsKICAgICAgICAgICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAl
c1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246
ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwg
cmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBnbG9i
YWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNTQ2LDkgKzU0Niw5IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBK
U1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2
YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52
YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVU
b1N0cmluZ0NvcHkoSlNDb250ZXgKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywg
dmFsdWUpOwogICAgIAotICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1
ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgIFJlZlB0cjxP
cGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTMzOSw4ICszMzksNiBA
QCBFWFBPUlRTCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZFeGVj
U3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAyQFBB
VkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93Q2Fz
ZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0dsb2Jh
bE9iamVjdEAyQEBaCi0gICAgP3RvU3RyaW5nQEpTQ2VsbEBKU0NAQFFCRT9BVlVTdHJpbmdAMkBQ
QVZFeGVjU3RhdGVAMkBAWgotICAgID90b1N0cmluZ0BKU09iamVjdEBKU0NAQFFCRT9BVlVTdHJp
bmdAMkBQQVZFeGVjU3RhdGVAMkBAWgogICAgID90b1N0cmluZ0RlY2ltYWxARGVjaW1hbE51bWJl
ckBXVEZAQFFCRUlQQV9XSUBaCiAgICAgP3RvU3RyaW5nRXhwb25lbnRpYWxARGVjaW1hbE51bWJl
ckBXVEZAQFFCRUlQQV9XSUBaCiAgICAgP3RvVGhpc09iamVjdEBKU09iamVjdEBKU0NAQFNBUEFW
MTJAUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgVVN0cmluZyB2YWx1ZVRvU291cmNlU3RyaW5nKEV4ZWNT
CiAgICAgICAgIHJldHVybiAiMCI7CiAKICAgICBpZiAodmFsLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybiBtYWtlVVN0cmluZygiXCIiLCBlc2NhcGVRdW90ZXModmFsLnRvU3RyaW5nKGV4ZWMp
KSwgIlwiIik7CisgICAgICAgIHJldHVybiBtYWtlVVN0cmluZygiXCIiLCBlc2NhcGVRdW90ZXMo
dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksICJcIiIpOwogCiAgICAgcmV0dXJuIHZh
bC5kZXNjcmlwdGlvbigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIAogICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICAvLyBEb24ndCBw
dXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24uCi0gICAgSWRl
bnRpZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRp
ZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIGlmICghZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHN0cmljdCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKQEAgLTI1OSwxMSArMjU5LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIAogICAgIEFTU0VSVCghb3AxLmlzTnVtYmVyKCkgfHwgIW9wMi5p
c051bWJlcigpKTsKICAgICAKLSAgICBpZiAob3AxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgaWYg
KG9wMi5pc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCBhc1N0cmluZyhvcDEpLCBhc1N0cmluZyhvcDIpKSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcob3AxKSwgb3AyLnRvUHJp
bWl0aXZlU3RyaW5nKGV4ZWMpKSk7Ci0gICAgfQorICAgIGlmIChvcDEuaXNTdHJpbmcoKSAmJiAh
b3AyLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
ZXhlYywgYXNTdHJpbmcob3AxKSwgb3AyLnRvU3RyaW5nKGV4ZWMpKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQWRkU2xvd0Nhc2UoZXhlYywgb3AxLCBvcDIpKTsKIH0KQEAgLTMw
Niw3ICszMDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNl
VmFsdWUuZ2V0KGV4ZWMsIGlkZW50KSk7CiB9CiAKQEAgLTMyNiw3ICszMjMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpZGVudChleGVj
LCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBw
cm9wZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgaWRlbnQpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzAzLDEwICsxMzAzLDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgdjIgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAgICBpZiAodjEu
aXNTdHJpbmcoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHYyLmlzU3RyaW5nKCkKLSAg
ICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIGFzU3RyaW5nKHYy
KSkKLSAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHYyLnRv
UHJpbWl0aXZlU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2
Mi5pc09iamVjdCgpKSB7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoY2FsbEZy
YW1lLCBhc1N0cmluZyh2MSksIHYyLnRvU3RyaW5nKGNhbGxGcmFtZSkpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiAgICAgfQpAQCAtMjQ2MSw3ICsyNDU5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgfQogICAgIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBz
dWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShj
YWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0
eSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0yNDg4LDcgKzI0ODYsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3Ry
aW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwg
c3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAg
ICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwogICAgIH0KICAg
ICAKQEAgLTI1MTgsNyArMjUxNiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICAgICAgaWYgKCFpc0pTQnl0ZUFycmF5KGJhc2VWYWx1ZSkpCiAgICAgICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
U1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWwpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2Ny
aXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkp
OwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwog
ICAgIH0KICAgICAKQEAgLTI1NzksNyArMjU3Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBiYXNlVmFsdWUu
cHV0KGNhbGxGcmFtZSwgaSwgdmFsdWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIElkZW50aWZp
ZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7Cisg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmco
Y2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgIGlmICghc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBi
YXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKQEAgLTI2MjAs
NyArMjYxOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAg
ICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbCkp
OwogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgaSwgdmFsdWUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9T
dHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1l
LCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAg
ICAgIGlmICghc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZh
bHVlLCBzbG90KTsKQEAgLTMzODYsNyArMzM4NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBpZiAocHJvcE5hbWUuZ2V0VUludDMyKGkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIGkpKSk7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgcHJv
cE5hbWUudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHByb3BOYW1lLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSkpOwogfQpA
QCAtMzQ5OCw3ICszNDk2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoYmFzZU9iaiwgY2FsbEZyYW1lLCBpKTsKICAgICBlbHNlIHsKICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxG
cmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVy
IHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVl
KGNhbGxGcmFtZSkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIHJl
c3VsdCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNh
bGxGcmFtZSwgcHJvcGVydHkpOwogICAgIH0KQEAgLTM1MzksNyArMzUzNyw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Rocm93X3JlZmUKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotICAgIFVTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBVU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
aWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgVVN0cmluZyBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICBVU3RyaW5nIHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICBzdHJCdWZmZXJba10gPSBzdHIuaW1wbCgpOwogICAgICAgICB0b3RhbFNpemUg
Kz0gc3RyLmxlbmd0aCgpOwogICAgICAgICBhbGxTdHJpbmdzOEJpdCA9IGFsbFN0cmluZ3M4Qml0
ICYmIHN0ci5pczhCaXQoKTsKQEAgLTI3Miw5ICsyNzIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0
aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25l
KQotICAgICAgICAgICAgICAgIHN0ciA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RyID0gZWxl
bWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKHN0cik7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTcsNyArMjk3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgVVN0cmluZyBzZXBhcmF0
b3I7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBz
ZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgc2Vw
YXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
CiAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewpAQCAt
MzA4LDcgKzMwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgICAgICAgICBnb3RvIHNraXBGaXJzdExvb3A7CiAgICAgICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVs
ZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQo
ZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaysrOwog
ICAgICAgICB9CiAKQEAgLTMxOSw3ICszMTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZCgnLCcpOwog
ICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHN0ckJ1
ZmZlci5hcHBlbmQoc2VwYXJhdG9yKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxl
bWVudC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBl
bmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzQzLDcgKzM0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyQnVmZmVy
LmJ1aWxkKGV4ZWMpKTsKQEAgLTQyOSw3ICs0MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5w
dXRCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCArIG4sIGV4ZWMtPmFyZ3VtZW50KG4pKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8
aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1N0cmluZyhleGVj
KSk7CisgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRh
YmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmFyZ3VtZW50KG4p
LCBzbG90KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBpbmxpbmUgYm9vbCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1CiAgICAgaWYgKHByb3BOYW1lLmdldFVJbnQzMihpKSkKICAgICAgICAgcmV0dXJuIGJhc2VP
YmotPmhhc1Byb3BlcnR5KGV4ZWMsIGkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBwcm9wTmFtZS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBwcm9wTmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5n
bG9iYWxEYXRhKCkuZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIENhbGxUeXBlIERhdGVDb25z
dHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKSk7
CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0
YXRlKikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEzICsxNTQsMTMg
QEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGJvb2wgdXNl
Q3VzdG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0cmluZyBjdXN0b21Gb3JtYXRTdHJpbmc7CiAK
LSAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIgJiYgIWV4
ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgdXNlQ3VzdG9tRm9ybWF0
ID0gdHJ1ZTsKLSAgICAgICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMSku
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICB9IGVsc2UgaWYgKGZvcm1h
dCA9PSBMb2NhbGVEYXRlQW5kVGltZSAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSkgewogICAgICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywg
ZGF0ZVN0eWxlKTsKLSAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUpOworICAgICAgICB0aW1lU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpLCB0aW1lU3R5bGUpOwogICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2Fs
ZVRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGRhdGVT
dHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUpOwogICAgIGVs
c2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVEYXRlICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0K
KwogICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIEVycm9y
SW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0
YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIFVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLmlz
VW5kZWZpbmVkKCkgPyBVU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGFwcGVuZFNvdXJjZVRvTWVzc2FnZSgp
IHsgcmV0dXJuIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGVycm9yUHJvdG9GCiAgICAgaWYgKG5hbWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
bmFtZVN0cmluZyA9ICJFcnJvciI7CiAgICAgZWxzZSB7Ci0gICAgICAgIG5hbWVTdHJpbmcgPSBu
YW1lLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpA
QCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90
b0YKICAgICBpZiAobWVzc2FnZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBtZXNzYWdlU3RyaW5n
ID0gIiI7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAg
SlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRQogICAgIAogSlNPYmplY3Qq
IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogb3As
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmlu
ZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBm
b3IgJyIsIG9wLCAiJyIpOworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmco
IiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICInIGlzIG5vdCBhIHZhbGlk
IGFyZ3VtZW50IGZvciAnIiwgb3AsICInIik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24t
PmlzRXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhj
ZXB0aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAg
SlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdAogCiBKU09iamVjdCogY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0
cmluZyhleGVjKSwgIicgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKKyAgICBVU3RyaW5nIGVycm9y
TWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpLCAiJyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0
aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+
KGV4Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGUKIAogSlNPYmplY3Qq
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9T
dHJpbmcoZXhlYyksICInIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgVVN0cmluZyBlcnJvck1l
c3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSwgIicgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+
aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNl
cHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBK
U09iamVjdCogY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0CiAKIEpTT2JqZWN0KiBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmco
ZXhlYyksICInIGlzIG5vdCBhbiBvYmplY3QiKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9
IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBp
cyBub3QgYW4gb2JqZWN0Iik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24tPmlzRXJyb3JJ
bnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKS0+
c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA1
NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE3ICs5NiwxNyBAQCBKU09iamVjdCogY29uc3Ry
dWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQogICAgICAg
ICBwcm9ncmFtID0gIihmdW5jdGlvbigpIHsgXG59KSI7CiAgICAgZWxzZSBpZiAoYXJncy5zaXpl
KCkgPT0gMSkKLSAgICAgICAgcHJvZ3JhbSA9IG1ha2VVU3RyaW5nKCIoZnVuY3Rpb24oKSB7ICIs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksICJcbn0pIik7CisgICAgICAgIHByb2dyYW0gPSBt
YWtlVVN0cmluZygiKGZ1bmN0aW9uKCkgeyAiLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSwgIlxufSkiKTsKICAgICBlbHNlIHsKICAgICAgICAgVVN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIihmdW5jdGlvbigiKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBhcmdzLnNpemUoKSAtIDE7IGkrKykgewogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFy
Z3MuYXQoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJn
cy5hdChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICB9CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIpIHsgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3MuYXQo
YXJncy5zaXplKCkgLSAxKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGFyZ3MuYXQoYXJncy5zaXplKCkgLSAxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG59KSIpOwogICAgICAgICBwcm9ncmFtID0gYnVpbGRl
ci50b1VTdHJpbmcoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvCiAgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRMZW5ndGggLSBudW1Cb3Vu
ZEFyZ3M7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBuYW1lKGV4ZWMsIHRhcmdldC5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVu
dGlmaWVyIG5hbWUoZXhlYywgdGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bmFtZSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCB0YXJn
ZXRPYmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApLCBib3VuZEFyZ3MsIGxlbmd0aCwgbmFtZSkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQo
RXhlY1N0YXRlKiBleGVjKQogICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0
aW9uLgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQ7IGkrKykKLSAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50
b1N0cmluZyhleGVjKTsKKyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJz
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMyArMTQ1LDYgQEAgZG91YmxlIEpTQ2VsbDo6dG9O
dW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09i
amVjdCo+KHRoaXMpLT50b051bWJlcihleGVjKTsKIH0KIAotVVN0cmluZyBKU0NlbGw6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvU3RyaW5nKGV4
ZWMpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT50b1N0
cmluZyhleGVjKTsKLX0KLQogSlNPYmplY3QqIEpTQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc1N0
cmluZygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpIGNvbnN0OwogICAgICAgICBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3QoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBKU1ZhbHVlIGVuY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIGRvTm90RXNjYXBlKQogewotICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0Zjgo
dHJ1ZSk7CisgICAgQ1N0cmluZyBjc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpLnV0ZjgodHJ1ZSk7CiAgICAgaWYgKCFjc3RyLmRhdGEoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVVJJRXJyb3IoZXhlYywgIlN0cmluZyBj
b250YWluZWQgYW4gaWxsZWdhbCBVVEYtMTYgc2VxdWVuY2UuIikpOwogCkBAIC0xNDMsNyArMTQy
LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogc3RhdGljIEpT
VmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogZG9Ob3RVbmVzY2FwZSwg
Ym9vbCBzdHJpY3QpCiB7CiAgICAgSlNTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgVVN0cmlu
ZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0
ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAK
ICAgICBpZiAoc3RyLmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIHN0ci5j
aGFyYWN0ZXJzOCgpLCBzdHIubGVuZ3RoKCksIGRvTm90VW5lc2NhcGUsIHN0cmljdCk7CkBAIC01
MTMsNyArNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQog
ICAgIGlmICgheC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHgp
OwogCi0gICAgVVN0cmluZyBzID0geC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB4
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGlmIChzLmlzOEJpdCgpKSB7CiAg
ICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnM4
KCksIHMubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOwpAQCAtNTU2LDcgKzU1NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICB9CiAKICAgICAvLyBJZiBU
b1N0cmluZyB0aHJvd3MsIHdlIHNob3VsZG4ndCBjYWxsIFRvSW50MzIuCi0gICAgVVN0cmluZyBz
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtNTY1LDcgKzU2
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZUZsb2F0KGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIocGFyc2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTYyMyw3ICs2MjIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICIqKy0uL0BfIjsKIAog
ICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKHN0ci5pczhCaXQoKSkg
ewogICAgICAgICBjb25zdCBMQ2hhciogYyA9IHN0ci5jaGFyYWN0ZXJzOCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgc3RyLmxlbmd0aCgpOyBrKyssIGMrKykgewpAQCAtNjYy
LDcgKzY2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBVU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGsgPSAw
OwogICAgIGludCBsZW4gPSBzdHIubGVuZ3RoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdW53cmFwQm94ZWRQ
cmltaXRpCiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkK
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG9iamVjdC0+dG9OdW1iZXIoZXhlYykpOwogICAgIGlm
IChvYmplY3QtPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBvYmplY3QtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJu
IG9iamVjdC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkJvb2xl
YW5PYmplY3Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBvYmplY3QtPnRvUHJpbWl0aXZlKGV4
ZWMpOwogICAgIHJldHVybiB2YWx1ZTsKQEAgLTIyMywyNSArMjIzLDEyIEBAIFN0cmluZ2lmaWVy
OjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgVVN0cmlu
ZyBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZS5nZXRTdHJpbmcoZXhlYywgcHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuYW1lLmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIG5hbWUuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAobmFtZS5pc09iamVj
dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhc09iamVjdChuYW1lKS0+aW5oZXJpdHMoJk51
bWJlck9iamVjdDo6c19pbmZvKSAmJiAhYXNPYmplY3QobmFtZSktPmluaGVyaXRzKCZTdHJpbmdP
YmplY3Q6OnNfaW5mbykpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IG5hbWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTgyNSw4ICs4MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
T05Qcm90b0Z1CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkpTT04ucGFyc2UgcmVx
dWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7Ci0gICAgVVN0cmluZyBzb3VyY2UgPSB2YWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
OCwxMSArNTE4LDExIEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGUK
ICAgICByZXR1cm4gcHJpbWl0aXZlLnRvTnVtYmVyKGV4ZWMpOwogfQogCi1VU3RyaW5nIEpTT2Jq
ZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNPYmplY3Q6
OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2
ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBwcmltaXRpdmUudG9TdHJpbmcoZXhlYyk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTA1
NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
Ym9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUmKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmlu
ZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAgICAgLy8gTk9URTogSlNPYmpl
Y3QgYW5kIGl0cyBzdWJjbGFzc2VzIG11c3QgYmUgYWJsZSB0byBncmFjZWZ1bGx5IGhhbmRsZSBF
eGVjU3RhdGUqID0gMCwKICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbGwgbWF5IGNvbWUgZnJv
bSBpbnNpZGUgdGhlIGNvbXBpbGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksMTEgKzIyOSw2
IEBAIGRvdWJsZSBKU1N0cmluZzo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4g
anNUb051bWJlcih2YWx1ZShleGVjKSk7CiB9CiAKLVVTdHJpbmcgSlNTdHJpbmc6OnRvU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICByZXR1cm4gdmFsdWUoZXhlYyk7Ci19Ci0K
IGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAg
ICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmlu
Z09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTcsNyArMjE3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0Owog
ICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKLSAgICAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAg
ICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICAKICAgICAgICAg
Ym9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTQ1MywyNCArNDUyLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNUcnVlKCk7IC8vIGZhbHNlLCBudWxsLCBhbmQg
dW5kZWZpbmVkIGFsbCBjb252ZXJ0IHRvIGZhbHNlLgogICAgIH0KIAotICAgIGlubGluZSBVU3Ry
aW5nIEpTVmFsdWU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxpbmUg
SlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEpTU3RyaW5nKj4oYXNDZWxsKCkpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGlzSW50MzIo
KSkKLSAgICAgICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3Mu
YWRkKGFzSW50MzIoKSk7Ci0gICAgICAgIGlmIChpc0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSk7Ci0g
ICAgICAgIGlmIChpc1RydWUoKSkKLSAgICAgICAgICAgIHJldHVybiAidHJ1ZSI7Ci0gICAgICAg
IGlmIChpc0ZhbHNlKCkpCi0gICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAgICAgICAgaWYg
KGlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKLSAgICAgICAgaWYgKGlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gInVuZGVmaW5lZCI7Ci0gICAgICAgIEFTU0VS
VChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CisgICAg
ICAgIHJldHVybiB0b1N0cmluZ1Nsb3dDYXNlKGV4ZWMpOwogICAgIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxMCArMjA0LDkgQEAgYm9vbCBKU1ZhbHVlOjpp
c1ZhbGlkQ2FsbGVlKCkKICAgICByZXR1cm4gYXNPYmplY3QoYXNDZWxsKCkpLT5nbG9iYWxPYmpl
Y3QoKTsKIH0KIAotSlNTdHJpbmcqIEpTVmFsdWU6OnRvUHJpbWl0aXZlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOworICAgIEFTU0VSVCghaXNTdHJpbmco
KSk7CiAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQz
MigpKSk7CiAgICAgaWYgKGlzRG91YmxlKCkpCkBAIC0yMjIsMTAgKzIyMSwxMSBAQCBKU1N0cmlu
ZyogSlNWYWx1ZTo6dG9QcmltaXRpdmVTdHJpbmcoRXhlCiAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVmaW5lZC51c3RyaW5n
KCkpOwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKLSAgICBKU1ZhbHVlIHYgPSBhc0NlbGwoKS0+
dG9QcmltaXRpdmUoZXhlYywgTm9QcmVmZXJlbmNlKTsKLSAgICBpZiAodi5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2LmFzQ2VsbCgpKTsKLSAgICBy
ZXR1cm4ganNTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgdi50b1N0cmluZyhleGVjKSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJp
bmcpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcoZXhlYyk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKKyAgICByZXR1
cm4gdmFsdWUudG9TdHJpbmcoZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsOCArMTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRvTnVtYmVy
IGNvbnZlcnNpb24gaXMgZXhwZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNl
cHRpb24gaGFzCiAgICAgICAgIC8vIGJlZW4gc2V0IGluIHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4K
ICAgICAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBVU3Ry
aW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1N0cmluZyogdG9Qcmlt
aXRpdmVTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTU3RyaW5nKiB0b1N0cmlu
ZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0
ZSopIGNvbnN0OwogICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKIApAQCAtMjQ1LDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGlubGluZSBjb25zdCBKU1ZhbHVlIGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiAq
dGhpczsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXJTbG93Q2Fz
ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNTdHJpbmcqIHRvU3RyaW5nU2xvd0Nhc2Uo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0
b09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0b1RoaXNPYmplY3RTbG93Q2FzZShFeGVj
U3RhdGUqKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDcsNyArNDQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90
bwogICAgICAgICByYWRpeCA9IHN0YXRpY19jYXN0PGludD4ocmFkaXhWYWx1ZS50b0ludGVnZXIo
ZXhlYykpOyAvLyBuYW4gLT4gMAogCiAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4
ZWMpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoeCkudG9TdHJp
bmcoZXhlYykpOwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciBudW1iZXIgdG8gY2hhcmFjdGVyIGNv
bnZlcnNpb24uCiAgICAgaWYgKHJhZGl4ID09IDM2KSB7CkBAIC00NzQsNyArNDc0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlmICghdG9UaGlzTnVt
YmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwgeCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVj
LCBqc051bWJlcih4KS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogewogICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9y
IG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKTsKLSAgICBVU3RyaW5nIHByb3Bl
cnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcg
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDApKTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikpOwogICAg
IEpTT2JqZWN0KiBPID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFVTdHJpbmcg
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3Jp
cHRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09i
amVjdChleGVjKS0+aGFzT3duUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDksNyArMTQ5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YShleGVjLT5hcmd1bWVudCgxKSwgY2FsbERhdGEp
ID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCAiaW52YWxpZCBnZXR0ZXIgdXNhZ2UiKSk7Ci0gICAgdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lR2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgxKSksIDApOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
ZmluZUdldHRlcih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3Vt
ZW50KDEpKSwgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEoZXhl
Yy0+YXJndW1lbnQoMSksIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgImludmFsaWQgc2V0
dGVyIHVzYWdlIikpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZVNldHRl
cih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKKyAgICB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVTZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpLCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIDApOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBHZXR0ZXIoZXhl
YywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTgxLDEzICsxODEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3VwU2V0
dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBTZXR0
ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+cHJvcGVy
dHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpKSk7CiB9CiAKIC8vIDE1LjIuNC4zIE9iamVjdC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmco
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTEgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1p
dGl2ZShjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgcDIgPSB2Mi50b1ByaW1pdGl2ZShjYWxsRnJh
bWUpOwogCi0gICAgaWYgKHAxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmV0dXJuIHAyLmlzU3Ry
aW5nKCkKLSAgICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhwMSksIGFz
U3RyaW5nKHAyKSkKLSAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhw
MSksIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDIudG9TdHJpbmcoY2FsbEZyYW1lKSkpOwotICAgIH0K
KyAgICBpZiAocDEuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFt
ZSwgYXNTdHJpbmcocDEpLCBwMi50b1N0cmluZyhjYWxsRnJhbWUpKTsKKwogICAgIGlmIChwMi5p
c1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCBqc1N0cmluZyhj
YWxsRnJhbWUsIHAxLnRvU3RyaW5nKGNhbGxGcmFtZSkpLCBhc1N0cmluZyhwMikpOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCBwMS50b1N0cmluZyhjYWxsRnJhbWUpLCBhc1N0
cmluZyhwMikpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHAxLnRvTnVtYmVyKGNhbGxGcmFtZSkg
KyBwMi50b051bWJlcihjYWxsRnJhbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAg
KzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0cmluZ3NbaV0uanNW
YWx1ZSgpOwotICAgICAgICAgICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBy
b3BlQnVpbGRlci5hcHBlbmQoYXNTdHJpbmcodikpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB2LnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodi50b1N0cmluZyhl
eGVjKSk7CiAKICAgICAgICAgICAgIGlmIChyb3BlQnVpbGRlci5sZW5ndGgoKSA8IG9sZExlbmd0
aCkgLy8gVHJ1ZSBmb3Igb3ZlcmZsb3cKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtOTcsMjAgKzk0LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxE
YXRhKTsKLQotICAgICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBy
b3BlQnVpbGRlci5hcHBlbmQoYXNTdHJpbmcodGhpc1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKSk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gMDsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyAr
K2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KGkpOwotICAgICAg
ICAgICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBl
bmQoYXNTdHJpbmcodikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJvcGVC
dWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB2LnRvU3RyaW5nKGV4ZWMpKSk7Cisg
ICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodi50b1N0cmluZyhleGVjKSk7CiAKICAgICAg
ICAgICAgIGlmIChyb3BlQnVpbGRlci5sZW5ndGgoKSA8IG9sZExlbmd0aCkgLy8gVHJ1ZSBmb3Ig
b3ZlcmZsb3cKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOwpAQCAtMzAwLDExICsyOTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2MS5hc051bWJlcigpICsgdjIuYXNOdW1iZXIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
djEuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgcmV0dXJuIHYyLmlzU3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCBhc1N0cmluZyh2
MikpCi0gICAgICAgICAgICAgICAgOiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwg
djIudG9QcmltaXRpdmVTdHJpbmcoY2FsbEZyYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KHYxLmlzU3RyaW5nKCkgJiYgIXYyLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHYyLnRvU3RyaW5nKGNhbGxGcmFtZSkpOwog
CiAgICAgICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCiAgICAgICAg
IHJldHVybiBqc0FkZFNsb3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVn
RXhwQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwKIAogdm9pZCBzZXRSZWdFeHBDb25zdHJ1
Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQo
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVj
dCktPnNldElucHV0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIHZv
aWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTMyMywxMyArMzIzLDEzIEBAIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICAgICAgcmV0dXJuIGFzT2Jq
ZWN0KGFyZzApOwogICAgIH0KIAotICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZzAuaXNVbmRlZmlu
ZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IE5vRmxhZ3M7CiAgICAgaWYg
KCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcx
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZs
YWdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgSlNW
YWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleAogYm9vbCBSZWdFeHBPYmplY3Q6
Om1hdGNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhw
Q29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVj
dG9yKCk7Ci0gICAgVVN0cmluZyBpbnB1dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgaW5wdXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICBpZiAoIXJlZ0V4cCgpLT5nbG9iYWwoKSkgewogICAgICAgICBpbnQg
cG9zaXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwx
MyArMTEwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJDYW5ub3Qgc3VwcGx5IGZsYWdzIHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAgZnJvbSBh
bm90aGVyLiIpKTsKICAgICAgICAgcmVnRXhwID0gYXNSZWdFeHBPYmplY3QoYXJnMCktPnJlZ0V4
cCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1
bWVudENvdW50KCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IFVTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBVU3RyaW5nKCIiKSA6
IGFyZzAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAg
aWYgKCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxh
Z3MoYXJnMS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBmbGFncyA9IHJlZ0V4cEZsYWdz
KGFyZzEudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRGbGFncykK
QEAgLTE1Myw3ICsxNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7CiAgICAgaWYgKHRoaXNPYmplY3Qt
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oZXhl
YykpCiAgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOwotICAgIFVTdHJpbmcgc291cmNlID0g
dGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2UpLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc291cmNlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2UpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAvLyBJZiBzb3VyY2UgaXMgZW1wdHksIHVzZSAiLyg/OikvIiB0byBhdm9pZCBjb2xsaWRp
bmcgd2l0aCBjb21tZW50IHN5bnRheAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiLyIsIHNvdXJjZS5sZW5ndGgoKSA/IHNvdXJjZSA6IFVT
dHJpbmcoIig/OikiKSwgcG9zdGZpeCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA1NjQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMCArOTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpOwogICAgIAotICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS5pc1N0cmluZygpCi0gICAgICAgID8gYXNTdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkpCi0gICAgICAgIDoganNTdHJpbmcoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Ry
aW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmlu
Z0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCkBAIC0xMTEsNyArMTA4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbAogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBORVZFUl9JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlcGxhY2VWYWx1ZSwgY2FsbERhdGEpOwogICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCi0gICAgICAgIHJlcGxhY2VtZW50U3RyaW5n
ID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICByZXBsYWNlbWVudFN0cmlu
ZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBjb25z
dCBVU3RyaW5nJiBzb3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIHNv
dXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKQEAgLTUwMiwxMCArNTAyLDcgQEAgc3RhdGljIE5F
VkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogCiAgICAgICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKExJS0VMWShyZXN1
bHQuaXNTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQo
YXNTdHJpbmcocmVzdWx0KS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2Fj
aGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkt
PnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01NDcsMTAgKzU0NCw3IEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
cmVzdWx0LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBw
ZW5kKGFzU3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5n
KGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhl
YykpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNTk0LDcgKzU4OCw3IEBAIHN0
YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQpKTsKICAgICAgICAgICAgICAg
ICBhcmdzLmFwcGVuZChzdHJpbmcpOwogCi0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFw
cGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVm
aW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZW1l
bnRzLmFwcGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBq
c1VuZGVmaW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNjMzLDcgKzYyNyw3IEBAIHN0YXRpYyBO
RVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1
ZSkKIHsKICAgICBjb25zdCBVU3RyaW5nJiBzdHJpbmcgPSBqc1N0cmluZy0+dmFsdWUoZXhlYyk7
Ci0gICAgVVN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY1Myw3ICs2NDcsNyBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFVTdHJpbmcg
cmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtNjY1LDEyICs2NTksOSBAQCBzdGF0aWMgTkVW
RVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVl
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHRoaXNWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKSk7Ci0gICAgfQotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmlu
Zyh0aGlzVmFsdWUpOworICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAg
ICBKU1ZhbHVlIHNlYXJjaFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBy
ZXBsYWNlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIApAQCAtNjk4LDcgKzY4OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigpKSB7CkBAIC03MTgsNyArNzA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKICAgICBKU1ZhbHVl
IGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKQEAgLTcz
OSwxMiArNzMwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAmJiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDEpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHYuaXNTdHJpbmcoKQotICAgICAgICAgICAgPyBq
c1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCBhc1N0cmluZyh2KSkKLSAgICAgICAg
ICAgIDoganNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwganNTdHJpbmcoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgdi50b1N0cmluZyhleGVjKSkpKTsKLSAgICB9CisgICAgaWYgKHRoaXNW
YWx1ZS5pc1N0cmluZygpICYmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVl
KSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKwogICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZ0Zyb21Bcmd1bWVudHMoZXhlYywgdGhpc1ZhbHVlKSk7CkBAIC03NTUsMTIgKzc0
MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQo
MSk7Ci0gICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgdTIg
PSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IHBvczsKICAgICBpZiAo
YTEuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcG9zID0gMDsKQEAgLTc4NiwxMyArNzc0LDEzIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAot
ICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHUyID0gYTAu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEudG9JbnRl
Z2VyUHJlc2VydmVOYU4oZXhlYyk7CiAgICAgaWYgKGRwb3MgPCAwKQogICAgICAgICBkcG9zID0g
MDsKQEAgLTgxMCw3ICs3OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJj
aWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwpAQCAtODI1LDcgKzgxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUg
ZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4x
MC40LjEsIGlmIGEwIGlzIHVuZGVmaW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAg
ICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLCBO
b0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyksIE5vRmxhZ3MpOwogICAgICAgICBpZiAoIXJlZy0+aXNWYWxpZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBy
ZWctPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQpAQCAtODYyLDcgKzg1MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC04NzcsNyArODY1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgcmVwbGFj
ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4K
ICAgICAgICAgICogIFBlciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAgaXMgdW5kZWZpbmVkIHN1YnN0
aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4
cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmco
IiIpIDogYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIi
KSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9GbGFncyk7CiAgICAgICAgIGlm
ICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZy0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICB9CkBA
IC04OTMsNyArODgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC05MjUsNyArOTEzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiAgICAgLy8gMi4gTGV0IFMg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBnaXZpbmcgaXQgdGhlIHRoaXMgdmFs
dWUgYXMgaXRzIGFyZ3VtZW50LgogICAgIC8vIDYuIExldCBzIGJlIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyBpbiBTLgotICAgIFVTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAKICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5
IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhl
IHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgpAQCAtMTAyNyw3
ICsxMDE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVVN0cmluZyBzZXBh
cmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBz
ZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAK
ICAgICAgICAgLy8gOS4gSWYgbGltID09IDAsIHJldHVybiBBLgogICAgICAgICBpZiAoIWxpbWl0
KQpAQCAtMTExNCw3ICsxMTAyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgICAgICAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICB9IGVsc2UgewotICAgICAgICB1U3RyaW5nID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKQEAgLTExNDQsMjQgKzExMzIsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlu
dCBsZW47Ci0gICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gMDsKLSAgICBVU3RyaW5nIHVTdHJpbmc7
Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGpzU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8SlNTdHJpbmcqPih0aGlzVmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBsZW4gPSBq
c1N0cmluZy0+bGVuZ3RoKCk7Ci0gICAgfSBlbHNlIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICAvLyBDaGVja09iamVjdENvZXJjaWJsZQorICAgIGlmICh0aGlz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
dVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKLSAgICB9CisKKyAgICBK
U1N0cmluZyoganNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpT
VmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBpbnQgbGVuID0ganNTdHJpbmctPmxl
bmd0aCgpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91
YmxlIGVuZDsKQEAgLTExODUsOSArMTE2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICB9CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nU3RhcnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwogICAgIHVuc2lnbmVkIHN1YnN0cmluZ0xlbmd0aCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpIC0gc3Vic3RyaW5nU3RhcnQ7Ci0gICAgaWYgKGpz
U3RyaW5nKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMs
IGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFy
dCwgc3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0
cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJD
YXNlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTExOTUsNyArMTE3Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLmlzU3RyaW5nKCkgPyBhc1N0
cmluZyh0aGlzVmFsdWUpIDoganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBj
b25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBz
Lmxlbmd0aCgpOwpAQCAtMTIxNCw3ICsxMTkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tP
YmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUuaXNTdHJpbmcoKSA/IGFzU3RyaW5nKHRoaXNW
YWx1ZSkgOiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIEpT
U3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJp
bmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKIAogICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7
CkBAIC0xMjU3LDEwICsxMjM1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29l
cmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobG9jYWxl
Q29tcGFyZShzLCBhMC50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0JpZyhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMjY4LDcgKzEyNDYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+
IiwgcywgIjwvYmlnPiIpKTsKIH0KIApAQCAtMTI3Nyw3ICsxMjU1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c21h
bGw+IiwgcywgIjwvc21hbGw+IikpOwogfQogCkBAIC0xMjg2LDcgKzEyNjQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxibGluaz4iLCBzLCAiPC9ibGluaz4iKSk7CiB9CiAKQEAgLTEyOTUsNyArMTI3Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPGI+IiwgcywgIjwvYj4iKSk7CiB9CiAKQEAgLTEzMDQsNyArMTI4Miw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiPHR0PiIsIHMsICI8L3R0PiIpKTsKIH0KIApAQCAtMTMxMyw3ICsxMjkxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8aT4iLCBzLCAiPC9pPiIpKTsKIH0KIApAQCAtMTMyMiw3ICsxMzAwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKSk7CiB9CiAKQEAgLTEzMzEsNyArMTMwOSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQogCkBAIC0xMzQwLDcgKzEzMTgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKIH0KIApAQCAtMTM0OSw5ICsxMzI3LDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgY29sb3I9
XCIiLCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgY29s
b3I9XCIiLCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICJcIj4iLCBzLCAiPC9mb250
PiIpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNG
b250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMzU5LDcgKzEzMzcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKICAgICB1aW50MzJfdCBzbWFsbElu
dGVnZXI7CkBAIC0xMzk2LDcgKzEzNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGltcGwpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIiLCBhMC50b1N0cmlu
ZyhleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0xNDA0LDkgKzEzODIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVj
dENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBz
LCAiPC9hPiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyks
ICJcIj4iLCBzLCAiPC9hPiIpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0MTQsOSArMTM5Miw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBVU3RyaW5n
IGxpbmtUZXh0ID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBsaW5rVGV4dCA9IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGxpbmtUZXh0U2l6
ZSA9IGxpbmtUZXh0Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHN0cmluZ1NpemUgPSBzLmxlbmd0
aCgpOwpAQCAtMTQ1OSw3ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJp
bmcoRXhlY1N0YQogewogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFVTdHJpbmcgc3RyID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgc3RyID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICB1bnNp
Z25lZCBsZWZ0ID0gMDsKICAgICBpZiAodHJpbUtpbmQgJiBUcmltTGVmdCkgewogICAgICAgICB3
aGlsZSAobGVmdCA8IHN0ci5sZW5ndGgoKSAmJiBpc1RyaW1XaGl0ZXNwYWNlKHN0cltsZWZ0XSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEpTVXRpbHMuY3BwOgorICAgICAgICAoS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKToK
KwogMjAxMi0wMS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgog
CiAgICAgICAgIEltcGxlbWVudCBhIG5ldyBhbGxvY2F0b3IgZm9yIGJhY2tpbmcgc3RvcmVzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsy
MTUsNyBAQCBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAKICAgICAg
ICAgaWYgKGluVmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVTdHJpbmcgPSBpblZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
ICAgIFVTdHJpbmcgdVN0cmluZyA9IGluVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IFVTdHJpbmdUb0NGU3RyaW5nKHVTdHJpbmcpOwog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjkgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCBy
ZXR1cm4gYSBKU1N0cmluZyogaW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGNhbGwg
dmFsdWUoKSBhZnRlciBjYWxsaW5nIHRvU3RyaW5nKCksIHRvCisgICAgICAgIGNvbnZlcnQgZnJv
bSAiSlMgc3RyaW5nIiAoSlNTdHJpbmcqKSB0byAiQysrIHN0cmluZyIgKFVTdHJpbmcpLCBzaW5j
ZQorICAgICAgICB0b1N0cmluZygpIG5vIGxvbmdlciByZXR1cm5zIGEgIkMrKyBzdHJpbmciLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJv
YXJkOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldERhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VV
UkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb25FdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6aW5pdERldmljZU9yaWVudGF0
aW9uRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3Vt
ZW50OjpzZXRMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6aXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRvY3VtZW50V3JpdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNl
bGVjdGlvbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnQ6
OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckZyb250
ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIcmVmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnNldEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
SG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQYXRobmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRTZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6
c2V0SGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmFzc2lnbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlSW5pdE1l
c3NhZ2VFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNxbCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNTaGFyZWRXb3JrZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6Y2xvc2UpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCk6CisgICAgICAgIChK
U1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24p
OgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW06CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVj
dCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydEFycmF5SW5zdGFuY2VUb0phdmFBcnJheSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICog
YnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNwcDoKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlz
cGF0Y2hWYWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Up
OgorICAgICAgICAoSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAqIGJy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6
Omludm9rZU1ldGhvZCk6CisgICAgICAgICogdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludGVybmFsczo6c2V0VXNlclByZWZlcnJlZExhbmd1
YWdlcyk6CisKIDIwMTItMDEtMjMgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgdW5pdGVJZk5vblplcm8gdG8gdXNlIGlzWmVyby4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRy
PElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlCiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHZhbHVlLnRvSW50MzIoZXhlYykpOwogICAg
IGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KICAgICByZXR1cm4gMDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpw
dXREZWxlZ2F0ZSgKIAogSlNWYWx1ZSBKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSBKU0NsaXBi
b2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZQogICAgIH0KIAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPT0gMSkgewotICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgY2xpcGJv
YXJkLT5jbGVhckRhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVj
U3RhdGUqIAogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCiAgICAgYm9vbCBz
dWNjZXNzOwotICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQtPmdldERhdGEodXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgc3VjY2Vzcyk7CisgICAg
U3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgc3VjY2Vzcyk7CiAgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3
IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICAgICAgcmVw
b3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFyZXR2
YWwuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0
cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVzdWx0ID0gdXN0cmlu
Z1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KIAog
ICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxMDU2NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soRXhlY1N0CiB7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KSk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogfQogCiBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIEpTVmFs
dWUganNEYXRlT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQpAQCAtMTUxLDEw
ICsxNTEsMTAgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRp
b24udG9PYmplY3QoZXhlYyk7CiAgICAgaW50IGxpbmVOdW1iZXIgPSBleGNlcHRpb25PYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lIikpLnRvSW50MzIoZXhlYyk7Ci0gICAg
VVN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkwgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VVUkwiKSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBleGNlcHRpb25Tb3VyY2VVUkwgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJzb3VyY2VVUkwiKSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoRXhjZXB0aW9uQmFzZSogZXhjZXB0
aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24pKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9u
IDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNSArNjAsMTUgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU0RPTUZvcm1EYQogSlNWYWx1ZSBKU0RPTUZvcm1EYXRhOjphcHBlbmQo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikg
ewotICAgICAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICAgICAgaWYgKHZhbHVlLmlu
aGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZTsK
ICAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMyAmJiAhZXhlYy0+YXJn
dW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICAgICAgZmlsZW5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMiku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGltcGwoKS0+YXBwZW5k
KG5hbWUsIHRvQmxvYih2YWx1ZSksIGZpbGVuYW1lKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpbXBsKCktPmFwcGVuZChuYW1lLCB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYykpKTsKKyAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICB9CiAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0
eShKU0NlCiAKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKQogewotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1Rv
U3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0
NjIsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQog
I2VuZGlmCiAKLSAgICBVU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTEyLDcgKzUxMiw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0
YXRlKiBleGUKICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBBdG9taWNT
dHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/
ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKQEAgLTY3OSw3ICs2NzksNyBA
QCBKU1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4CiAgICAgaWYgKCFsaXN0
ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlt
cGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3Ry
aW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlz
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNjkzLDcgKzY5Myw3
IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxp
c3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2Jq
ZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGV4
ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBleGVjLT5h
cmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
dmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6Omlu
dGVydmFsKEV4CiAKIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlv
bkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0
IFN0cmluZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VP
cmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6YWJzb2x1CiAKIEpTVmFsdWUgSlNE
ZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBib29sIGJ1YmJsZXMgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4o
ZXhlYyk7CiAgICAgYm9vbCBjYW5jZWxhYmxlID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpOwogICAgIC8vIElmIGFscGhhLCBiZXRhIG9yIGdhbW1hIGFyZSBudWxsIG9yIHVuZGVm
aW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAK
IHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiB2b2lkIEpTRGljdGlvbmFyeTo6
Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU2NyaXB0VmFsdWUm
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgRnJhbWUqIGxleGljYWxG
cmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzks
NyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgICAg
ICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAmJiBldmVudC0+c3RvcmVzUmVz
dWx0QXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBldmVudC0+c3RvcmVSZXN1bHQodXN0cmlu
Z1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIGV2ZW50
LT5zdG9yZVJlc3VsdCh1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsKICAgICAgICAgICAg
ICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnBy
ZXZlbnREZWZhdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxB
bGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkg
ewogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAg
ICAgICBib29sIG9rOwotICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBJZGVudGlmaWVyOjp0b1VJbnQzMihzdHJpbmcsIG9rKTsKICAgICAgICAgaWYgKG9rKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+
Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpKSk7CkBAIC04Myw4ICs4Myw4
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIFRo
ZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50CiAg
ICAgYm9vbCBvazsKLSAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhl
Yy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICBVU3RyaW5nIHN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykgewogICAgICAgICBpZiAo
Tm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPm5hbWVkSXRlbVdpdGhJbmRleCh1c3RyaW5nVG9BdG9t
aWNTdHJpbmcoc3RyaW5nKSwgaW5kZXgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKQEAg
LTExMywxNSArMTEzLDE1IEBAIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRl
cigKIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYm9vbCBvazsKLSAgICB1aW50MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMy
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLCBvayk7CisgICAgdWludDMyX3QgaW5k
ZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyksIG9rKTsKICAgICBpZiAob2spCiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCktPml0ZW0oaW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0
TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKTsKIH0KIAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBy
ZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNW
YWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQqPihpbXBsKCkpOwotICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBSZWZQ
dHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBpZiAoY29udGV4dElkID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8IGNvbnRleHRJZCA9PSAi
d2Via2l0LTNkIikgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29s
bGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MiwxNSArNzIsMTUgQEAgSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpuYW1l
R2V0dGVyKEV4ZQogSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9V
SW50MzIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICB1aW50MzJf
dCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVy
biBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0
aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAg
IHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEhU
TUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsMTQgKzEzNiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9j
dW1lbnRXcml0ZShFeGVjU3RhCiAKICAgICBzaXplX3Qgc2l6ZSA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKIAotICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpcnN0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50
ZWRTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcoZmlyc3RTdHJpbmcpOwogICAgIGlmIChzaXplICE9
IDEpIHsKICAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNs
ZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcg
PSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3Ry
aW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdt
ZW50ZWRTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHN1YnNlcXVlbnRTdHJpbmcpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TElucHV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEpTSFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uRGlyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnB1dC0+
c2V0U2VsZWN0aW9uRGlyZWN0aW9uKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KSkpOworICAgIGlucHV0LT5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjKQpAQCAtOTcsNyAr
OTcsNyBAQCBKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uCiAKICAgICBp
bnQgc3RhcnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgIGludCBlbmQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIFN0cmluZyBkaXJlY3Rpb24g
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAg
IFN0cmluZyBkaXJlY3Rpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIGlucHV0LT5zZXRTZWxlY3Rpb25SYW5n
ZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q29uCiAgICAgICAgIGlmICghdHlwZS5pc1N0cmluZygpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHR5cGVTdHJpbmcgPSB1c3RyaW5nVG9TdHJp
bmcodHlwZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyB0eXBlU3RyaW5nID0gdXN0
cmluZ1RvU3RyaW5nKHR5cGUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
aWYgKHR5cGVTdHJpbmcgPT0gInNlcGFyYXRvciIpIHsKICAgICAgICAgICAgIGl0ZW1zLmFwcGVu
ZChuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBl
ZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSogbWVudUl0ZW0gPSBuZXcgQ29udGV4dE1lbnVJdGVtKCh0eXBlU3RyaW5nID09ICJjaGVja2Jv
eCIgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlwZSksIHR5cGVkSWQsIHVzdHJpbmdU
b1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtKiBtZW51SXRlbSA9IG5ldyBDb250ZXh0TWVudUl0ZW0oKHR5cGVTdHJpbmcgPT0gImNoZWNr
Ym94IiA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlKSwgdHlwZWRJZCwgdXN0cmlu
Z1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAg
ICAgaWYgKCFlbmFibGVkLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgbWVudUl0ZW0t
PnNldEVuYWJsZWQoZW5hYmxlZC50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICAgICAgaWYgKCFj
aGVja2VkLmlzVW5kZWZpbmVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxG
cmFtZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGltcGwoKS0+ZXZhbHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIGV4
Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZXhjZXB0aW9uKTsKIAogICAg
IGlmIChleGNlcHRpb24pCiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgZXhjZXB0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6ZGVmaW5lR2V0dGVyKEpTT2JqZWN0KiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRI
cmVmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhyZWYg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGhyZWYgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIcmVmKHVzdHJpbmdUb1N0cmluZyhocmVmKSwg
YWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0xODcsNyAr
MTg3LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lk
IEpTTG9jYXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBVU3RyaW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBwcm90b2NvbCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFByb3Rv
Y29sKEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGltcGwoKS0+c2V0SG9zdCh1c3RyaW5nVG9TdHJpbmcoaG9zdCksIGFjdGl2ZURPTVdpbmRvdyhl
eGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRI
b3N0bmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBo
b3N0bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaG9zdG5hbWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIb3N0bmFtZSh1c3RyaW5n
VG9TdHJpbmcoaG9zdG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93
KGV4ZWMpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3RuYW1l
KEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwb3J0ID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBwb3J0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwoKS0+c2V0UG9ydCh1c3RyaW5nVG9TdHJpbmcocG9ydCksIGFjdGl2ZURPTVdpbmRvdyhleGVj
KSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRo
bmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwYXRo
bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRQYXRobmFtZSh1c3RyaW5nVG9T
dHJpbmcocGF0aG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4
ZWMpKTsKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4
ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsKCktPnNldFNlYXJjaCh1c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVE
T01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIzNyw3ICsyMzcsNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4CiAKIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0
cmluZyBoYXNoID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBoYXNoID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0SGFzaCh1c3RyaW5nVG9TdHJp
bmcoaGFzaCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpA
QCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4
ZWMKIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5yZXBsYWNlKHVzdHJpbmdUb1N0cmluZyh1
cmxTdHJpbmcpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsK
QEAgLTI2MCw3ICsyNjAsNyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUq
IGV4CiAKIEpTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5hc3NpZ24odXN0cmluZ1RvU3RyaW5nKHVy
bFN0cmluZyksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEw
MiwxMSBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojpwb3J0cyhFeGVjU3RhdGUqCiAKIHN0YXRp
YyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNF
dmVudCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgVVN0cmluZyYgdHlwZUFy
ZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcm
IHR5cGVBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgYm9vbCBjYW5CdWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhl
Yyk7CiAgICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIG9yaWdpbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDQp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhl
Yy0+YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgb3JpZ2lu
QXJnID0gZXhlYy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gdG9ET01X
aW5kb3coZXhlYy0+YXJndW1lbnQoNikpOwogICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBt
ZXNzYWdlUG9ydHM7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4
ZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3Fs
U3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODEsNyAr
ODEsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3Ry
aW5nIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZh
bHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2Fj
dGlvblN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNx
bAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3Fs
U3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODAsNyAr
ODAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsCiAgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3Ry
aW5nIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZh
bHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTU2hhcmVkV29yCiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVT
dHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgVVN0cmluZyBuYW1lOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPiAxKQotICAgICAgICBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7
CisgICAgICAgIG5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBl
CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhh
c1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJp
bmcoZXhlYykpOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3
ICsyNDEsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlCiAgICAg
ICAgIHJldHVybiB0aHJvd1N5bnRheEVycm9yKGV4ZWMpOwogCiAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1w
bCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQtPmdldEV4dGVu
c2lvbihuYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCAid3JvbmcgVVJMIikpOwogICAgIFJlZlB0cjxXZWJTb2Nr
ZXQ+IHdlYlNvY2tldCA9IFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQpOwpAQCAtNzMsMTQgKzcz
LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJTb2NrZXQKICAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHByb3RvY29sczsKICAgICAgICAgICAgIEpTQXJyYXkqIHByb3Rv
Y29sc0FycmF5ID0gYXNBcnJheShwcm90b2NvbHNWYWx1ZSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9jb2xzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzQXJy
YXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
cHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5n
LCBwcm90b2NvbHMsIGVjKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBw
cm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKSk7
CisgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBw
cm90b2NvbCwgZWMpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIEpTVmFsdWUgSlNXZWJTb2NrZXQ6OnNl
bmQoRXhlY1N0YXRlKiBleGUKICAgICBlbHNlIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6
OnNfaW5mbykpCiAgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSks
IGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5n
VG9TdHJpbmcobWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyBzdHJpbmdN
ZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5nKG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZChzdHJpbmdN
ZXNzYWdlLCBlYyk7CkBAIC0xMzUsNyArMTM1LDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6Y2xv
c2UoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgeCA9IGNsYW1wVG8oeCwgbWluVmFsdWUsIG1h
eFZhbHVlKTsKICAgICAgICAgY29kZSA9IGNsYW1wVG9JbnRlZ2VyKHgpOwogICAgICAgICBpZiAo
YXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgICAgICByZWFzb24gPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVhc29u
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29u
dGV4dDo6aW1wb3J0U2NyaXB0cyhFCiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAg
ICAgICB1cmxzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYykpKTsKKyAgICAgICAgdXJscy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dvcmtlckNvbgogICAgIGlmICghZXhlYy0+YXJndW1lbnRD
b3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CiAKLSAgICBVU3RyaW5nIHNjcmlwdFVS
TCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc2NyaXB0
VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDggKzg1LDggQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVu
KEV4ZWNTdGF0ZQogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3Vn
aCBhcmd1bWVudHMiKSk7CiAKLSAgICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYg
dXJsID0gaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KTsKKyAgICBTdHJpbmcgbWV0aG9kID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKQEAgLTEyOSw3ICsxMjks
NyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgIGVs
c2UgaWYgKHZhbC5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAg
IGltcGwoKS0+c2VuZCh0b0FycmF5QnVmZmVyKHZhbCksIGVjKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgaW1wbCgpLT5zZW5kKHVzdHJpbmdUb1N0cmluZyh2YWwudG9TdHJpbmcoZXhlYykp
LCBlYyk7CisgICAgICAgICAgICBpbXBsKCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBlYyk7CiAgICAgfQogCiAgICAgaW50IHNpZ25lZExp
bmVOdW1iZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDkgKzg5LDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihF
eAogewogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGV4
ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNlcHRpb24/Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAg
U3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0
cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyB2YWx1ZSA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgIGltcGwoKS0+c2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDAsOCArMTAwLDggQEAg
SlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeAogewogICAgIGlmIChleGVj
LT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJp
bmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIFN0cmluZyB2YWx1ZSA9IGltcGwoKS0+Z2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9j
YWxOYW1lKTsKICAgICByZXR1cm4ganNTdHJpbmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7CiB9
CkBAIC0xMTAsOCArMTEwLDggQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFt
ZXRlcgogewogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBT
dHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5n
IGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGltcGwoKS0+cmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFj
ZVVSSSwgbG9jYWxOYW1lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBQYXNzT3duUHRyPFNjaGVkdWxl
ZEFjdGlvbj4gU2NoZWR1bGVkQWN0CiAgICAgaWYgKGdldENhbGxEYXRhKHYsIGNhbGxEYXRhKSA9
PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2
YWwoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBVU3RyaW5nIHN0cmlu
ZyA9IHYudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFNjaGVkdWxlZEFjdGlvbih1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKSwgaXNvbGF0ZWRXb3JsZCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDggQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudAogICAgIEpTQzo6
SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsK
ICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKGpzRnVuY3Rpb24tPnRvU3RyaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUoanNM
aXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLCBkb2N1bWVudCkpKTsKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Ob2RlKGpzTGlzdGVuZXItPmlzb2xhdGVkV29y
bGQoKSwgZG9jdW1lbnQpOworICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+
dG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1ZShzY3JpcHRTdGF0ZSkpOwogfQogCiBib29sIGV2
ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExpc3Rl
bmVyKiBldmVudExpc3RlbmVyLCBTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRT
dHJpbmcoU2NyaXB0U3RhdGUqCiAKIFN0cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogewotICAgIFN0cmluZyByZXN1bHQgPSB1c3RyaW5n
VG9TdHJpbmcobV92YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSkpOworICAgIFN0cmlu
ZyByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcobV92YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRT
dGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0
aGUgb2JqZWN0LgogICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHNjcmlwdFN0YXRlLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDEwNTY0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgRU5ECiAgICAgSlNWYWx1ZSBsaXN0
ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBs
LT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhl
YykpJHBhc3NSZWZQdHJIYW5kbGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21p
Y1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIEVORAogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1w
bDsKQEAgLTI5MTIsNyArMjkxMiw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBpZiAoJHR5
cGUgZXEgIkRPTVN0cmluZyIpIHsKICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ29udmVydE51bGxUb051bGxTdHJpbmcifSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmVmbGVjdCJ9OwogICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKLSAgICAg
ICAgcmV0dXJuICJ1c3RyaW5nVG9TdHJpbmcoJHZhbHVlLmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6
ICR2YWx1ZS50b1N0cmluZyhleGVjKSkiOworICAgICAgICByZXR1cm4gInVzdHJpbmdUb1N0cmlu
ZygkdmFsdWUuaXNFbXB0eSgpID8gVVN0cmluZygpIDogJHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewpA
QCAtMzQ5Miw3ICszNDkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0
cnVjdAogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2Np
YXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsKIAotICAgIEF0b21pY1N0
cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9B
dG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90
ZXN0YmluZGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0
YmluZGluZ3MuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
dGVzdGJpbmRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdykgewogICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSBleFZhbCA9IGNvbXAudmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAq
bXNnID0gZXhWYWwudG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2hhciogbXNnID0gZXhWYWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8gPSAtMTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGV4VmFsLnR5cGUoKSA9PSBPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSBsaW5lVmFsID0gT2JqZWN0OjpkeW5hbWljQ2FzdChleFZhbCkuZ2V0KGV4ZWMsSWRl
bnRpZmllcigibGluZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0cXRiaW5k
aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RxdGJpbmRp
bmdzLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3Rx
dGJpbmRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgp
ID09IFRocm93KSB7CiAgICAgICAgICAgICAgICAgcURlYnVnKCkgPDwgImV4Y2VwdGlvbiB0aHJv
d24iOwogICAgICAgICAgICAgICAgIEpTVmFsdWUqIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGNoYXIqIG1zZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS5hc2NpaSgpOwor
ICAgICAgICAgICAgICAgIGNoYXIqIG1zZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuYXNjaWkoKTsKICAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gLTE7CiAgICAgICAg
ICAgICAgICAgaWYgKGV4VmFsLT50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlKiBsaW5lVmFsID0gZXhWYWwtPmdldE9iamVjdCgpLT5nZXQoZXhlYywg
SWRlbnRpZmllcigibGluZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRp
bGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5
LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGls
aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogCiAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7
CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nIHVzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSB1
c3RyaW5nLnV0ZjgoKTsKICAgICAgICAgTlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4
Kiljc3RyaW5nLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNzdHJpbmcubGVuZ3RoKCkp
IH07CiAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwg
JnN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNv
YmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw3ICs0ODgsNyBAQCBqb2JqZWN0IEphdmFK
U09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqCiAgICAgICAgICAgICByZXN1bHQgPSBlbnYtPk5l
d09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJRCwgKGpkb3VibGUpdmFsdWUudG9O
dW1iZXIoZXhlYykpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgcmVz
dWx0ID0gZW52LT5OZXdTdHJpbmcgKChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nVmFsdWUubGVuZ3RoKCkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29s
ZWFuKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQ
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
TklVdGlsaXR5UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNyArNjMsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAg
ICAgICAgICAgICAgICAgICAgIGVudi0+TmV3U3RyaW5nVVRGKCIiKSk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0udG9TdHJpbmcoZXhlYyk7CisgICAg
ICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVs
ZW1lbnQoamFycmF5LCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMt
Pk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwg
c3RyaW5nVmFsdWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICB9CkBAIC05OCw3ICs5OCw3
IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgICAg
IGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
ICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgICAgICAgICAgICAgamNoYXIgdmFsdWUgPSAwOwogICAgICAgICAgICAgICAg
IGlmIChzdHJpbmdWYWx1ZS5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gKChjb25zdCBqY2hhciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpKVswXTsKQEAgLTI0OSw3
ICsyNDksNyBAQCBqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBlCiAgICAg
ICAgICAgICAvLyBjb252ZXJ0aW5nIGZyb20gYSBudWxsLgogICAgICAgICAgICAgaWYgKCFyZXN1
bHQubCAmJiAhc3RyY21wKGphdmFDbGFzc05hbWUsICJqYXZhLmxhbmcuU3RyaW5nIikpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsK
ICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMt
Pk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBz
dHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2
YVN0cmluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpT
Qy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZp
ZWxkSlNDLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YUZpZWxkSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBq
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhCiAgICAgICAgICAgICAgICAg
YXJnc1swXS5sID0gamluc3RhbmNlOwogICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChl
eGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCBy
ZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwog
ICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlw
dGlvbi50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIEpTVmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGUKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZSBnZXR0aW5nICVzID0gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkp
LnV0ZjgoKS5kYXRhKCksIGpzcmVzdWx0LnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRp
bmcgJXMgPSAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHJl
dHVybiBqc3Jlc3VsdDsKIH0KQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlz
cGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAgICAgICAgICAgICAgICAgYXJnc1sxXSA9IGphdmFWYWx1
ZTsKICAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgSmF2YVR5cGVWb2lkLCBtaWQsIGFy
Z3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlm
IChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVj
KSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQg
SmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1MKICAgICBjb25zdCBKYXZhSW5zdGFu
Y2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlKj4oaSk7CiAgICAg
anZhbHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGktPnJvb3RPYmpl
Y3QoKSwgYVZhbHVlLCBtX3R5cGUsIHR5cGVDbGFzc05hbWUoKSk7CiAKLSAgICBMT0coTGl2ZUNv
bm5lY3QsICJKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSBzZXR0aW5nIHZhbHVlICVzIHRv
ICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBhVmFsdWUudG9TdHJp
bmcoZXhlYykuYXNjaWkoKS5kYXRhKCkpOworICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNldHRpbmcgdmFsdWUgJXMgdG8gJXMiLCBVU3RyaW5nKG5h
bWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCksIGFWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEphdmFUeXBlQXJyYXk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NCw3ICsxOTQsNyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNT
CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgQ1N0cmluZyBqYXZh
Q2xhc3NOYW1lID0gak1ldGhvZC0+cGFyYW1ldGVyQXQoaSkudXRmOCgpOwogICAgICAgICBqQXJn
c1tpXSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIG1fcm9vdE9iamVjdC5nZXQoKSwgZXhl
Yy0+YXJndW1lbnQoaSksIGphdmFUeXBlRnJvbUNsYXNzTmFtZShqYXZhQ2xhc3NOYW1lLmRhdGEo
KSksIGphdmFDbGFzc05hbWUuZGF0YSgpKTsKLSAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2
YUluc3RhbmNlOjppbnZva2VNZXRob2QgYXJnWyVkXSA9ICVzIiwgaSwgZXhlYy0+YXJndW1lbnQo
aSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coTGl2ZUNvbm5l
Y3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBleGVjLT5h
cmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwog
ICAgIH0KIAogICAgIGp2YWx1ZSByZXN1bHQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjUwogICAgICAgICBqbWV0aG9kSUQgbWV0aG9k
SWQgPSBnZXRNZXRob2RJRChvYmosIGpNZXRob2QtPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBqTWV0
aG9kLT5zaWduYXR1cmUoKSk7CiAgICAgICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhl
Yywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwg
ak1ldGhvZC0+cmV0dXJuVHlwZSgpLCBtZXRob2RJZCwgakFyZ3MuZGF0YSgpLCByZXN1bHQsIGNh
bGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw3ICszNDMsNyBAQCBRVmFy
aWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAq
KGNvbnN0IHVzaG9ydCopc3RyLmltcGwoKS0+Y2hhcmFjdGVycygpIDogMCkpOwogICAgICAgICAg
ICAgICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7
CkBAIC0zNTgsNyArMzU4LDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVj
U3RhdAogICAgICAgICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwogICAgICAgICAgICAgICAg
IHJldHVybiBRU3RyaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmlu
Zy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CkBA
IC00MzksNyArNDM5LDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3Rh
dAogICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0
KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
cXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVy
cygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHFzdHJpbmcpOwpAQCAtNDUzLDcgKzQ1Myw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0
aCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxl
bmd0aCgpKTsKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwpA
QCAtNDYyLDcgKzQ2Miw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0
YXQKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQot
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChj
b25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgo
KSk7CiAgICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OwogICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CkBAIC00NzgsNyArNDc4LDcgQEAgUVZhcmlhbnQgY29u
dmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KFFCeXRlQXJyYXkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkp
LCBhcnItPmxlbmd0aCgpKSk7CiAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChR
U3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmlu
Zy5sZW5ndGgoKSkudG9MYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3Ry
aW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAg
fQogI2lmbmRlZiBRVF9OT19EQVRFU1RSSU5HCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1
c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlw
ZTo6UURhdGVUaW1lKSB7CkBAIC01NzEsNyArNTcxLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVl
VG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIFJlZ0V4cE9iamVjdCAqcmUgPSBz
dGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOwogKi8KICAgICAgICAgICAgICAgICAv
LyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBhIGJpdCByaXNreQotICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAg
ICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5p
bXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgICAgICAg
ICAvLyB0aGlzIGlzIG9mIHRoZSBmb3JtICcveHh4eHh4L2knCkBAIC01OTEsNyArNTkxLDcgQEAg
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAg
ICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0IHBhcnNlIGEgSlMgcmVnZXhwIjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNv
bnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgp
KTsKIAogICAgICAgICAgICAgICAgIFFSZWdFeHAgcmUocXN0cmluZyk7CkBAIC0xNTk5LDcgKzE1
OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNPYmo7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5n
IGZ1bmNOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBmdW5jSWRlbnQoZXhlYywgZnVu
Y05hbWUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVy
bmFsc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0lu
dGVybmFsczo6c2V0VXNlclByZWZlcnJlZExhbmd1YQogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1
YWdlczsKICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcg
bGFuZ3VhZ2UgPSB1c3RyaW5nVG9TdHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gdXN0cmluZ1RvU3RyaW5nKGFycmF5LT5n
ZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBsYW5ndWFn
ZXMuYXBwZW5kKGxhbmd1YWdlKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3Ry
aW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVy
IGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmci
IChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRv
U3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50
KToKKwogMjAxMi0wMS0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBXZWJLaXQyIHJlbWVtYmVyIHRoZSBoZWlnaHQgb2YgdGhlIFdlYiBJbnNw
ZWN0b3Igd2hlbiBpdCBpcyBkb2NrZWQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Myw3ICsxNjMsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVU
CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgTlBTdHJpbmcg
bnBTdHJpbmcgPSBjcmVhdGVOUFN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS51dGY4KCkpOwor
ICAgICAgICBOUFN0cmluZyBucFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkpOwogICAgICAgICBTVFJJTkdOX1RPX05QVkFSSUFO
VChucFN0cmluZy5VVEY4Q2hhcmFjdGVycywgbnBTdHJpbmcuVVRGOExlbmd0aCwgdmFyaWFudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMCBAQAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3Ry
aW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVy
IGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmci
IChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRv
U3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
OndpdGhHbG9iYWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKwogMjAxMi0wMS0yMCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgV2ViQ29yZSBSdW5Mb29wIHdv
cmsgZm9yIFdlYktpdDEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1OCw3ICsxMjU4LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbAogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5cGVdXTsKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpXTsKKyAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDp1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KV07CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIFthcnJheSBh
ZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6RG91YmxlVmFsdWVUeXBlXV07CiAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUudG9O
dW1iZXIoZXhlYyldXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAiIjsKIAogICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhy
ZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiAt
IChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFBvc2l0aW9uJilwb3MgYWZmaW5p
dHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKQEAgLTExOTEsNyArMTE5Miw4IEBAIC0g
KE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAi
IjsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJu
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoYW55V29ybGRHbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiAtIChKU0dsb2JhbENvbnRleHRSZWYp
X2dsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123649</attachid>
            <date>2012-01-23 16:22:40 -0800</date>
            <delta_ts>2012-01-23 16:51:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123162239.patch</filename>
            <type>text/plain</type>
            <size>149987</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IGJ1aWxkIGFmdGVyIHIxMDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxMyArNTY3LDEzIEBAIF9f
Wk5LM0pTQzE5U291cmNlUHJvdmlkZXJDYWNoZThieXRlU2l6ZUUKIF9fWk5LM0pTQzZKU0NlbGwx
MXRvUHJpbWl0aXZlRVBOU185RXhlY1N0YXRlRU5TXzIyUHJlZmVycmVkUHJpbWl0aXZlVHlwZUUK
IF9fWk5LM0pTQzZKU0NlbGw4dG9OdW1iZXJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M2SlND
ZWxsOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RQotX19aTksz
SlNDNkpTQ2VsbDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0
U3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlF
eGVjU3RhdGVFUk5TXzdVU3RyaW5nRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8K
IF9fWk5LM0pTQzdKU0FycmF5MTJzdWJjbGFzc0RhdGFFdgogX19aTkszSlNDN0pTVmFsdWUxNnRv
TnVtYmVyU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9PYmpl
Y3RTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKK19fWk5LM0pT
QzdKU1ZhbHVlMTZ0b1N0cmluZ1Nsb3dDYXNlRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0pT
VmFsdWUxOXN5bnRoZXNpemVQcm90b3R5cGVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTIwdG9UaGlzT2JqZWN0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNW
YWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJpCiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwog
Ci0gICAgICAgIHByaW50ZigiJXMiLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBw
dXRjaGFyKCdcbicpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRlYnVnKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xu
IiwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudXRmOCgpLmRhdGEoKSk7CisgICAg
ZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBW
ZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7
CkBAIC0yOTQsNyArMjk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwpAQCAtMzEwLDcgKzMxMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBu
b3Qgb3BlbiBmaWxlLiIpKSk7CkBAIC00ODcsOSArNDg3LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0
aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGR1bXApIHsKICAgICAgICAgICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAl
c1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246
ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwg
cmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBnbG9i
YWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNTQ2LDkgKzU0Niw5IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBK
U1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2
YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52
YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVU
b1N0cmluZ0NvcHkoSlNDb250ZXgKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywg
dmFsdWUpOwogICAgIAotICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1
ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgIFJlZlB0cjxP
cGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTMzOSw4ICszMzksNiBA
QCBFWFBPUlRTCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZFeGVj
U3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAyQFBB
VkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93Q2Fz
ZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0dsb2Jh
bE9iamVjdEAyQEBaCi0gICAgP3RvU3RyaW5nQEpTQ2VsbEBKU0NAQFFCRT9BVlVTdHJpbmdAMkBQ
QVZFeGVjU3RhdGVAMkBAWgotICAgID90b1N0cmluZ0BKU09iamVjdEBKU0NAQFFCRT9BVlVTdHJp
bmdAMkBQQVZFeGVjU3RhdGVAMkBAWgogICAgID90b1N0cmluZ0RlY2ltYWxARGVjaW1hbE51bWJl
ckBXVEZAQFFCRUlQQV9XSUBaCiAgICAgP3RvU3RyaW5nRXhwb25lbnRpYWxARGVjaW1hbE51bWJl
ckBXVEZAQFFCRUlQQV9XSUBaCiAgICAgP3RvVGhpc09iamVjdEBKU09iamVjdEBKU0NAQFNBUEFW
MTJAUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgVVN0cmluZyB2YWx1ZVRvU291cmNlU3RyaW5nKEV4ZWNT
CiAgICAgICAgIHJldHVybiAiMCI7CiAKICAgICBpZiAodmFsLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybiBtYWtlVVN0cmluZygiXCIiLCBlc2NhcGVRdW90ZXModmFsLnRvU3RyaW5nKGV4ZWMp
KSwgIlwiIik7CisgICAgICAgIHJldHVybiBtYWtlVVN0cmluZygiXCIiLCBlc2NhcGVRdW90ZXMo
dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksICJcIiIpOwogCiAgICAgcmV0dXJuIHZh
bC5kZXNjcmlwdGlvbigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIAogICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICAvLyBEb24ndCBw
dXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24uCi0gICAgSWRl
bnRpZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRp
ZmllciBpZGVudChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIGlmICghZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHN0cmljdCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKQEAgLTI1OSwxMSArMjU5LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIAogICAgIEFTU0VSVCghb3AxLmlzTnVtYmVyKCkgfHwgIW9wMi5p
c051bWJlcigpKTsKICAgICAKLSAgICBpZiAob3AxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgaWYg
KG9wMi5pc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCBhc1N0cmluZyhvcDEpLCBhc1N0cmluZyhvcDIpKSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcob3AxKSwgb3AyLnRvUHJp
bWl0aXZlU3RyaW5nKGV4ZWMpKSk7Ci0gICAgfQorICAgIGlmIChvcDEuaXNTdHJpbmcoKSAmJiAh
b3AyLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
ZXhlYywgYXNTdHJpbmcob3AxKSwgb3AyLnRvU3RyaW5nKGV4ZWMpKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQWRkU2xvd0Nhc2UoZXhlYywgb3AxLCBvcDIpKTsKIH0KQEAgLTMw
Niw3ICszMDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNl
VmFsdWUuZ2V0KGV4ZWMsIGlkZW50KSk7CiB9CiAKQEAgLTMyNiw3ICszMjMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpZGVudChleGVj
LCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBw
cm9wZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgaWRlbnQpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzAzLDEwICsxMzAzLDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgdjIgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAgICBpZiAodjEu
aXNTdHJpbmcoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHYyLmlzU3RyaW5nKCkKLSAg
ICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIGFzU3RyaW5nKHYy
KSkKLSAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHYyLnRv
UHJpbWl0aXZlU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2
Mi5pc09iamVjdCgpKSB7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoY2FsbEZy
YW1lLCBhc1N0cmluZyh2MSksIHYyLnRvU3RyaW5nKGNhbGxGcmFtZSkpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiAgICAgfQpAQCAtMjQ2MSw3ICsyNDU5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgfQogICAgIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBz
dWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShj
YWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0
eSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0yNDg4LDcgKzI0ODYsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3Ry
aW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwg
c3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAg
ICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwogICAgIH0KICAg
ICAKQEAgLTI1MTgsNyArMjUxNiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICAgICAgaWYgKCFpc0pTQnl0ZUFycmF5KGJhc2VWYWx1ZSkpCiAgICAgICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
U1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWwpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2Ny
aXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkp
OwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwog
ICAgIH0KICAgICAKQEAgLTI1NzksNyArMjU3Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBiYXNlVmFsdWUu
cHV0KGNhbGxGcmFtZSwgaSwgdmFsdWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIElkZW50aWZp
ZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7Cisg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmco
Y2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgIGlmICghc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBi
YXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKQEAgLTI2MjAs
NyArMjYxOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAg
ICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbCkp
OwogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgaSwgdmFsdWUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9T
dHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1l
LCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAg
ICAgIGlmICghc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZh
bHVlLCBzbG90KTsKQEAgLTMzODYsNyArMzM4NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBpZiAocHJvcE5hbWUuZ2V0VUludDMyKGkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIGkpKSk7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgcHJv
cE5hbWUudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHByb3BOYW1lLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSkpOwogfQpA
QCAtMzQ5OCw3ICszNDk2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoYmFzZU9iaiwgY2FsbEZyYW1lLCBpKTsKICAgICBlbHNlIHsKICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxG
cmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVy
IHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVl
KGNhbGxGcmFtZSkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIHJl
c3VsdCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNh
bGxGcmFtZSwgcHJvcGVydHkpOwogICAgIH0KQEAgLTM1MzksNyArMzUzNyw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Rocm93X3JlZmUKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotICAgIFVTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBVU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
aWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgVVN0cmluZyBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICBVU3RyaW5nIHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICBzdHJCdWZmZXJba10gPSBzdHIuaW1wbCgpOwogICAgICAgICB0b3RhbFNpemUg
Kz0gc3RyLmxlbmd0aCgpOwogICAgICAgICBhbGxTdHJpbmdzOEJpdCA9IGFsbFN0cmluZ3M4Qml0
ICYmIHN0ci5pczhCaXQoKTsKQEAgLTI3Miw5ICsyNzIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0
aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25l
KQotICAgICAgICAgICAgICAgIHN0ciA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RyID0gZWxl
bWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKHN0cik7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTcsNyArMjk3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgVVN0cmluZyBzZXBhcmF0
b3I7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBz
ZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgc2Vw
YXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
CiAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewpAQCAt
MzA4LDcgKzMwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgICAgICAgICBnb3RvIHNraXBGaXJzdExvb3A7CiAgICAgICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVs
ZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQo
ZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaysrOwog
ICAgICAgICB9CiAKQEAgLTMxOSw3ICszMTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZCgnLCcpOwog
ICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHN0ckJ1
ZmZlci5hcHBlbmQoc2VwYXJhdG9yKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxl
bWVudC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBl
bmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzQzLDcgKzM0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyQnVmZmVy
LmJ1aWxkKGV4ZWMpKTsKQEAgLTQyOSw3ICs0MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5w
dXRCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCArIG4sIGV4ZWMtPmFyZ3VtZW50KG4pKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8
aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1N0cmluZyhleGVj
KSk7CisgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRh
YmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmFyZ3VtZW50KG4p
LCBzbG90KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBpbmxpbmUgYm9vbCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1CiAgICAgaWYgKHByb3BOYW1lLmdldFVJbnQzMihpKSkKICAgICAgICAgcmV0dXJuIGJhc2VP
YmotPmhhc1Byb3BlcnR5KGV4ZWMsIGkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBwcm9wTmFtZS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBwcm9wTmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5n
bG9iYWxEYXRhKCkuZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIENhbGxUeXBlIERhdGVDb25z
dHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKSk7
CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0
YXRlKikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEzICsxNTQsMTMg
QEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGJvb2wgdXNl
Q3VzdG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0cmluZyBjdXN0b21Gb3JtYXRTdHJpbmc7CiAK
LSAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIgJiYgIWV4
ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgdXNlQ3VzdG9tRm9ybWF0
ID0gdHJ1ZTsKLSAgICAgICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMSku
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICB9IGVsc2UgaWYgKGZvcm1h
dCA9PSBMb2NhbGVEYXRlQW5kVGltZSAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSkgewogICAgICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywg
ZGF0ZVN0eWxlKTsKLSAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUpOworICAgICAgICB0aW1lU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpLCB0aW1lU3R5bGUpOwogICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2Fs
ZVRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGRhdGVT
dHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUpOwogICAgIGVs
c2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVEYXRlICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0K
KwogICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIEVycm9y
SW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0
YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIFVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLmlz
VW5kZWZpbmVkKCkgPyBVU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGFwcGVuZFNvdXJjZVRvTWVzc2FnZSgp
IHsgcmV0dXJuIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGVycm9yUHJvdG9GCiAgICAgaWYgKG5hbWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
bmFtZVN0cmluZyA9ICJFcnJvciI7CiAgICAgZWxzZSB7Ci0gICAgICAgIG5hbWVTdHJpbmcgPSBu
YW1lLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpA
QCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90
b0YKICAgICBpZiAobWVzc2FnZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBtZXNzYWdlU3RyaW5n
ID0gIiI7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAg
SlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRQogICAgIAogSlNPYmplY3Qq
IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogb3As
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmlu
ZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBm
b3IgJyIsIG9wLCAiJyIpOworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmco
IiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICInIGlzIG5vdCBhIHZhbGlk
IGFyZ3VtZW50IGZvciAnIiwgb3AsICInIik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24t
PmlzRXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhj
ZXB0aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAg
SlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdAogCiBKU09iamVjdCogY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0
cmluZyhleGVjKSwgIicgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKKyAgICBVU3RyaW5nIGVycm9y
TWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpLCAiJyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0
aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+
KGV4Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGUKIAogSlNPYmplY3Qq
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9T
dHJpbmcoZXhlYyksICInIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgVVN0cmluZyBlcnJvck1l
c3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSwgIicgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+
aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNl
cHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBK
U09iamVjdCogY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0CiAKIEpTT2JqZWN0KiBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmco
ZXhlYyksICInIGlzIG5vdCBhbiBvYmplY3QiKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9
IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBp
cyBub3QgYW4gb2JqZWN0Iik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24tPmlzRXJyb3JJ
bnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKS0+
c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA1
NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE3ICs5NiwxNyBAQCBKU09iamVjdCogY29uc3Ry
dWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQogICAgICAg
ICBwcm9ncmFtID0gIihmdW5jdGlvbigpIHsgXG59KSI7CiAgICAgZWxzZSBpZiAoYXJncy5zaXpl
KCkgPT0gMSkKLSAgICAgICAgcHJvZ3JhbSA9IG1ha2VVU3RyaW5nKCIoZnVuY3Rpb24oKSB7ICIs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksICJcbn0pIik7CisgICAgICAgIHByb2dyYW0gPSBt
YWtlVVN0cmluZygiKGZ1bmN0aW9uKCkgeyAiLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSwgIlxufSkiKTsKICAgICBlbHNlIHsKICAgICAgICAgVVN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIihmdW5jdGlvbigiKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBhcmdzLnNpemUoKSAtIDE7IGkrKykgewogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFy
Z3MuYXQoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJn
cy5hdChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICB9CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIpIHsgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3MuYXQo
YXJncy5zaXplKCkgLSAxKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGFyZ3MuYXQoYXJncy5zaXplKCkgLSAxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG59KSIpOwogICAgICAgICBwcm9ncmFtID0gYnVpbGRl
ci50b1VTdHJpbmcoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvCiAgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRMZW5ndGggLSBudW1Cb3Vu
ZEFyZ3M7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBuYW1lKGV4ZWMsIHRhcmdldC5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVu
dGlmaWVyIG5hbWUoZXhlYywgdGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bmFtZSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCB0YXJn
ZXRPYmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApLCBib3VuZEFyZ3MsIGxlbmd0aCwgbmFtZSkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQo
RXhlY1N0YXRlKiBleGVjKQogICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0
aW9uLgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQ7IGkrKykKLSAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50
b1N0cmluZyhleGVjKTsKKyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJz
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMyArMTQ1LDYgQEAgZG91YmxlIEpTQ2VsbDo6dG9O
dW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09i
amVjdCo+KHRoaXMpLT50b051bWJlcihleGVjKTsKIH0KIAotVVN0cmluZyBKU0NlbGw6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvU3RyaW5nKGV4
ZWMpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT50b1N0
cmluZyhleGVjKTsKLX0KLQogSlNPYmplY3QqIEpTQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc1N0
cmluZygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpIGNvbnN0OwogICAgICAgICBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3QoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBKU1ZhbHVlIGVuY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIGRvTm90RXNjYXBlKQogewotICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0Zjgo
dHJ1ZSk7CisgICAgQ1N0cmluZyBjc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpLnV0ZjgodHJ1ZSk7CiAgICAgaWYgKCFjc3RyLmRhdGEoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVVJJRXJyb3IoZXhlYywgIlN0cmluZyBj
b250YWluZWQgYW4gaWxsZWdhbCBVVEYtMTYgc2VxdWVuY2UuIikpOwogCkBAIC0xNDMsNyArMTQy
LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogc3RhdGljIEpT
VmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogZG9Ob3RVbmVzY2FwZSwg
Ym9vbCBzdHJpY3QpCiB7CiAgICAgSlNTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgVVN0cmlu
ZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0
ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAK
ICAgICBpZiAoc3RyLmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIHN0ci5j
aGFyYWN0ZXJzOCgpLCBzdHIubGVuZ3RoKCksIGRvTm90VW5lc2NhcGUsIHN0cmljdCk7CkBAIC01
MTMsNyArNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQog
ICAgIGlmICgheC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHgp
OwogCi0gICAgVVN0cmluZyBzID0geC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB4
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGlmIChzLmlzOEJpdCgpKSB7CiAg
ICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnM4
KCksIHMubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOwpAQCAtNTU2LDcgKzU1NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICB9CiAKICAgICAvLyBJZiBU
b1N0cmluZyB0aHJvd3MsIHdlIHNob3VsZG4ndCBjYWxsIFRvSW50MzIuCi0gICAgVVN0cmluZyBz
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtNTY1LDcgKzU2
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZUZsb2F0KGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIocGFyc2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTYyMyw3ICs2MjIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICIqKy0uL0BfIjsKIAog
ICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKHN0ci5pczhCaXQoKSkg
ewogICAgICAgICBjb25zdCBMQ2hhciogYyA9IHN0ci5jaGFyYWN0ZXJzOCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgc3RyLmxlbmd0aCgpOyBrKyssIGMrKykgewpAQCAtNjYy
LDcgKzY2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBVU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGsgPSAw
OwogICAgIGludCBsZW4gPSBzdHIubGVuZ3RoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdW53cmFwQm94ZWRQ
cmltaXRpCiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkK
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG9iamVjdC0+dG9OdW1iZXIoZXhlYykpOwogICAgIGlm
IChvYmplY3QtPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBvYmplY3QtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJu
IG9iamVjdC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkJvb2xl
YW5PYmplY3Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBvYmplY3QtPnRvUHJpbWl0aXZlKGV4
ZWMpOwogICAgIHJldHVybiB2YWx1ZTsKQEAgLTIyMywyNSArMjIzLDEyIEBAIFN0cmluZ2lmaWVy
OjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgVVN0cmlu
ZyBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZS5nZXRTdHJpbmcoZXhlYywgcHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuYW1lLmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIG5hbWUuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAobmFtZS5pc09iamVj
dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhc09iamVjdChuYW1lKS0+aW5oZXJpdHMoJk51
bWJlck9iamVjdDo6c19pbmZvKSAmJiAhYXNPYmplY3QobmFtZSktPmluaGVyaXRzKCZTdHJpbmdP
YmplY3Q6OnNfaW5mbykpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IG5hbWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTgyNSw4ICs4MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
T05Qcm90b0Z1CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkpTT04ucGFyc2UgcmVx
dWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7Ci0gICAgVVN0cmluZyBzb3VyY2UgPSB2YWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
OCwxMSArNTE4LDExIEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGUK
ICAgICByZXR1cm4gcHJpbWl0aXZlLnRvTnVtYmVyKGV4ZWMpOwogfQogCi1VU3RyaW5nIEpTT2Jq
ZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNPYmplY3Q6
OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2
ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBwcmltaXRpdmUudG9TdHJpbmcoZXhlYyk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTA1
NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
Ym9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUmKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmlu
ZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAgICAgLy8gTk9URTogSlNPYmpl
Y3QgYW5kIGl0cyBzdWJjbGFzc2VzIG11c3QgYmUgYWJsZSB0byBncmFjZWZ1bGx5IGhhbmRsZSBF
eGVjU3RhdGUqID0gMCwKICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbGwgbWF5IGNvbWUgZnJv
bSBpbnNpZGUgdGhlIGNvbXBpbGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksMTEgKzIyOSw2
IEBAIGRvdWJsZSBKU1N0cmluZzo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4g
anNUb051bWJlcih2YWx1ZShleGVjKSk7CiB9CiAKLVVTdHJpbmcgSlNTdHJpbmc6OnRvU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICByZXR1cm4gdmFsdWUoZXhlYyk7Ci19Ci0K
IGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAg
ICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmlu
Z09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTcsNyArMjE3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0Owog
ICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKLSAgICAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAg
ICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICAKICAgICAgICAg
Ym9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTQ1MywyNCArNDUyLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNUcnVlKCk7IC8vIGZhbHNlLCBudWxsLCBhbmQg
dW5kZWZpbmVkIGFsbCBjb252ZXJ0IHRvIGZhbHNlLgogICAgIH0KIAotICAgIGlubGluZSBVU3Ry
aW5nIEpTVmFsdWU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxpbmUg
SlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEpTU3RyaW5nKj4oYXNDZWxsKCkpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGlzSW50MzIo
KSkKLSAgICAgICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3Mu
YWRkKGFzSW50MzIoKSk7Ci0gICAgICAgIGlmIChpc0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSk7Ci0g
ICAgICAgIGlmIChpc1RydWUoKSkKLSAgICAgICAgICAgIHJldHVybiAidHJ1ZSI7Ci0gICAgICAg
IGlmIChpc0ZhbHNlKCkpCi0gICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAgICAgICAgaWYg
KGlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKLSAgICAgICAgaWYgKGlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gInVuZGVmaW5lZCI7Ci0gICAgICAgIEFTU0VS
VChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CisgICAg
ICAgIHJldHVybiB0b1N0cmluZ1Nsb3dDYXNlKGV4ZWMpOwogICAgIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxMCArMjA0LDkgQEAgYm9vbCBKU1ZhbHVlOjpp
c1ZhbGlkQ2FsbGVlKCkKICAgICByZXR1cm4gYXNPYmplY3QoYXNDZWxsKCkpLT5nbG9iYWxPYmpl
Y3QoKTsKIH0KIAotSlNTdHJpbmcqIEpTVmFsdWU6OnRvUHJpbWl0aXZlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOworICAgIEFTU0VSVCghaXNTdHJpbmco
KSk7CiAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQz
MigpKSk7CiAgICAgaWYgKGlzRG91YmxlKCkpCkBAIC0yMjIsMTAgKzIyMSwxMSBAQCBKU1N0cmlu
ZyogSlNWYWx1ZTo6dG9QcmltaXRpdmVTdHJpbmcoRXhlCiAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVmaW5lZC51c3RyaW5n
KCkpOwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKLSAgICBKU1ZhbHVlIHYgPSBhc0NlbGwoKS0+
dG9QcmltaXRpdmUoZXhlYywgTm9QcmVmZXJlbmNlKTsKLSAgICBpZiAodi5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2LmFzQ2VsbCgpKTsKLSAgICBy
ZXR1cm4ganNTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgdi50b1N0cmluZyhleGVjKSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJp
bmcpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcoZXhlYyk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKKyAgICByZXR1
cm4gdmFsdWUudG9TdHJpbmcoZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsOCArMTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRvTnVtYmVy
IGNvbnZlcnNpb24gaXMgZXhwZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNl
cHRpb24gaGFzCiAgICAgICAgIC8vIGJlZW4gc2V0IGluIHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4K
ICAgICAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBVU3Ry
aW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1N0cmluZyogdG9Qcmlt
aXRpdmVTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTU3RyaW5nKiB0b1N0cmlu
ZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0
ZSopIGNvbnN0OwogICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKIApAQCAtMjQ1LDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGlubGluZSBjb25zdCBKU1ZhbHVlIGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiAq
dGhpczsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXJTbG93Q2Fz
ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNTdHJpbmcqIHRvU3RyaW5nU2xvd0Nhc2Uo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0
b09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0b1RoaXNPYmplY3RTbG93Q2FzZShFeGVj
U3RhdGUqKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDcsNyArNDQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90
bwogICAgICAgICByYWRpeCA9IHN0YXRpY19jYXN0PGludD4ocmFkaXhWYWx1ZS50b0ludGVnZXIo
ZXhlYykpOyAvLyBuYW4gLT4gMAogCiAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4
ZWMpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoeCkudG9TdHJp
bmcoZXhlYykpOwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciBudW1iZXIgdG8gY2hhcmFjdGVyIGNv
bnZlcnNpb24uCiAgICAgaWYgKHJhZGl4ID09IDM2KSB7CkBAIC00NzQsNyArNDc0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlmICghdG9UaGlzTnVt
YmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwgeCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVj
LCBqc051bWJlcih4KS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogewogICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9y
IG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKTsKLSAgICBVU3RyaW5nIHByb3Bl
cnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcg
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDApKTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikpOwogICAg
IEpTT2JqZWN0KiBPID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFVTdHJpbmcg
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3Jp
cHRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09i
amVjdChleGVjKS0+aGFzT3duUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDksNyArMTQ5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YShleGVjLT5hcmd1bWVudCgxKSwgY2FsbERhdGEp
ID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCAiaW52YWxpZCBnZXR0ZXIgdXNhZ2UiKSk7Ci0gICAgdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lR2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgxKSksIDApOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
ZmluZUdldHRlcih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3Vt
ZW50KDEpKSwgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEoZXhl
Yy0+YXJndW1lbnQoMSksIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgImludmFsaWQgc2V0
dGVyIHVzYWdlIikpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZVNldHRl
cih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKKyAgICB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVTZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpLCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIDApOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBHZXR0ZXIoZXhl
YywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTgxLDEzICsxODEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3VwU2V0
dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBTZXR0
ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+cHJvcGVy
dHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpKSk7CiB9CiAKIC8vIDE1LjIuNC4zIE9iamVjdC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmco
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTEgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1p
dGl2ZShjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgcDIgPSB2Mi50b1ByaW1pdGl2ZShjYWxsRnJh
bWUpOwogCi0gICAgaWYgKHAxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmV0dXJuIHAyLmlzU3Ry
aW5nKCkKLSAgICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhwMSksIGFz
U3RyaW5nKHAyKSkKLSAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhw
MSksIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDIudG9TdHJpbmcoY2FsbEZyYW1lKSkpOwotICAgIH0K
KyAgICBpZiAocDEuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFt
ZSwgYXNTdHJpbmcocDEpLCBwMi50b1N0cmluZyhjYWxsRnJhbWUpKTsKKwogICAgIGlmIChwMi5p
c1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCBqc1N0cmluZyhj
YWxsRnJhbWUsIHAxLnRvU3RyaW5nKGNhbGxGcmFtZSkpLCBhc1N0cmluZyhwMikpOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCBwMS50b1N0cmluZyhjYWxsRnJhbWUpLCBhc1N0
cmluZyhwMikpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHAxLnRvTnVtYmVyKGNhbGxGcmFtZSkg
KyBwMi50b051bWJlcihjYWxsRnJhbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAg
KzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0cmluZ3NbaV0uanNW
YWx1ZSgpOwotICAgICAgICAgICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBy
b3BlQnVpbGRlci5hcHBlbmQoYXNTdHJpbmcodikpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB2LnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodi50b1N0cmluZyhl
eGVjKSk7CiAKICAgICAgICAgICAgIGlmIChyb3BlQnVpbGRlci5sZW5ndGgoKSA8IG9sZExlbmd0
aCkgLy8gVHJ1ZSBmb3Igb3ZlcmZsb3cKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtOTcsMjAgKzk0LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxE
YXRhKTsKLQotICAgICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBy
b3BlQnVpbGRlci5hcHBlbmQoYXNTdHJpbmcodGhpc1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKSk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gMDsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyAr
K2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KGkpOwotICAgICAg
ICAgICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBl
bmQoYXNTdHJpbmcodikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJvcGVC
dWlsZGVyLmFwcGVuZChqc1N0cmluZyhnbG9iYWxEYXRhLCB2LnRvU3RyaW5nKGV4ZWMpKSk7Cisg
ICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodi50b1N0cmluZyhleGVjKSk7CiAKICAgICAg
ICAgICAgIGlmIChyb3BlQnVpbGRlci5sZW5ndGgoKSA8IG9sZExlbmd0aCkgLy8gVHJ1ZSBmb3Ig
b3ZlcmZsb3cKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOwpAQCAtMzAwLDExICsyOTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2MS5hc051bWJlcigpICsgdjIuYXNOdW1iZXIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
djEuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgcmV0dXJuIHYyLmlzU3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCBhc1N0cmluZyh2
MikpCi0gICAgICAgICAgICAgICAgOiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwg
djIudG9QcmltaXRpdmVTdHJpbmcoY2FsbEZyYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KHYxLmlzU3RyaW5nKCkgJiYgIXYyLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHYyLnRvU3RyaW5nKGNhbGxGcmFtZSkpOwog
CiAgICAgICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCiAgICAgICAg
IHJldHVybiBqc0FkZFNsb3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVn
RXhwQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwKIAogdm9pZCBzZXRSZWdFeHBDb25zdHJ1
Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQo
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVj
dCktPnNldElucHV0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIHZv
aWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTMyMywxMyArMzIzLDEzIEBAIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICAgICAgcmV0dXJuIGFzT2Jq
ZWN0KGFyZzApOwogICAgIH0KIAotICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZzAuaXNVbmRlZmlu
ZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IE5vRmxhZ3M7CiAgICAgaWYg
KCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcx
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZs
YWdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgSlNW
YWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleAogYm9vbCBSZWdFeHBPYmplY3Q6
Om1hdGNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhw
Q29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVj
dG9yKCk7Ci0gICAgVVN0cmluZyBpbnB1dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgaW5wdXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICBpZiAoIXJlZ0V4cCgpLT5nbG9iYWwoKSkgewogICAgICAgICBpbnQg
cG9zaXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwx
MyArMTEwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJDYW5ub3Qgc3VwcGx5IGZsYWdzIHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAgZnJvbSBh
bm90aGVyLiIpKTsKICAgICAgICAgcmVnRXhwID0gYXNSZWdFeHBPYmplY3QoYXJnMCktPnJlZ0V4
cCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1
bWVudENvdW50KCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IFVTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBVU3RyaW5nKCIiKSA6
IGFyZzAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAg
aWYgKCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxh
Z3MoYXJnMS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBmbGFncyA9IHJlZ0V4cEZsYWdz
KGFyZzEudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRGbGFncykK
QEAgLTE1Myw3ICsxNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7CiAgICAgaWYgKHRoaXNPYmplY3Qt
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oZXhl
YykpCiAgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOwotICAgIFVTdHJpbmcgc291cmNlID0g
dGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2UpLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc291cmNlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2UpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAvLyBJZiBzb3VyY2UgaXMgZW1wdHksIHVzZSAiLyg/OikvIiB0byBhdm9pZCBjb2xsaWRp
bmcgd2l0aCBjb21tZW50IHN5bnRheAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiLyIsIHNvdXJjZS5sZW5ndGgoKSA/IHNvdXJjZSA6IFVT
dHJpbmcoIig/OikiKSwgcG9zdGZpeCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA1NjQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMCArOTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpOwogICAgIAotICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS5pc1N0cmluZygpCi0gICAgICAgID8gYXNTdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkpCi0gICAgICAgIDoganNTdHJpbmcoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Ry
aW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmlu
Z0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCkBAIC0xMTEsNyArMTA4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbAogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MTA1NjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBORVZFUl9JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlcGxhY2VWYWx1ZSwgY2FsbERhdGEpOwogICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCi0gICAgICAgIHJlcGxhY2VtZW50U3RyaW5n
ID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICByZXBsYWNlbWVudFN0cmlu
ZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBjb25z
dCBVU3RyaW5nJiBzb3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIHNv
dXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKQEAgLTUwMiwxMCArNTAyLDcgQEAgc3RhdGljIE5F
VkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogCiAgICAgICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKExJS0VMWShyZXN1
bHQuaXNTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQo
YXNTdHJpbmcocmVzdWx0KS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2Fj
aGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkt
PnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01NDcsMTAgKzU0NCw3IEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
cmVzdWx0LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBw
ZW5kKGFzU3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5n
KGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhl
YykpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNTk0LDcgKzU4OCw3IEBAIHN0
YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQpKTsKICAgICAgICAgICAgICAg
ICBhcmdzLmFwcGVuZChzdHJpbmcpOwogCi0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFw
cGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVm
aW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZW1l
bnRzLmFwcGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBq
c1VuZGVmaW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNjMzLDcgKzYyNyw3IEBAIHN0YXRpYyBO
RVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1
ZSkKIHsKICAgICBjb25zdCBVU3RyaW5nJiBzdHJpbmcgPSBqc1N0cmluZy0+dmFsdWUoZXhlYyk7
Ci0gICAgVVN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY1Myw3ICs2NDcsNyBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFVTdHJpbmcg
cmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtNjY1LDEyICs2NTksOSBAQCBzdGF0aWMgTkVW
RVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVl
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHRoaXNWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKSk7Ci0gICAgfQotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmlu
Zyh0aGlzVmFsdWUpOworICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAg
ICBKU1ZhbHVlIHNlYXJjaFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBy
ZXBsYWNlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIApAQCAtNjk4LDcgKzY4OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigpKSB7CkBAIC03MTgsNyArNzA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKICAgICBKU1ZhbHVl
IGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKQEAgLTcz
OSwxMiArNzMwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAmJiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDEpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHYuaXNTdHJpbmcoKQotICAgICAgICAgICAgPyBq
c1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCBhc1N0cmluZyh2KSkKLSAgICAgICAg
ICAgIDoganNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwganNTdHJpbmcoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgdi50b1N0cmluZyhleGVjKSkpKTsKLSAgICB9CisgICAgaWYgKHRoaXNW
YWx1ZS5pc1N0cmluZygpICYmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVl
KSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKwogICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZ0Zyb21Bcmd1bWVudHMoZXhlYywgdGhpc1ZhbHVlKSk7CkBAIC03NTUsMTIgKzc0
MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQo
MSk7Ci0gICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgdTIg
PSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IHBvczsKICAgICBpZiAo
YTEuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcG9zID0gMDsKQEAgLTc4NiwxMyArNzc0LDEzIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAot
ICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHUyID0gYTAu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEudG9JbnRl
Z2VyUHJlc2VydmVOYU4oZXhlYyk7CiAgICAgaWYgKGRwb3MgPCAwKQogICAgICAgICBkcG9zID0g
MDsKQEAgLTgxMCw3ICs3OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJj
aWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwpAQCAtODI1LDcgKzgxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUg
ZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4x
MC40LjEsIGlmIGEwIGlzIHVuZGVmaW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAg
ICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLCBO
b0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyksIE5vRmxhZ3MpOwogICAgICAgICBpZiAoIXJlZy0+aXNWYWxpZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBy
ZWctPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQpAQCAtODYyLDcgKzg1MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC04NzcsNyArODY1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgcmVwbGFj
ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4K
ICAgICAgICAgICogIFBlciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAgaXMgdW5kZWZpbmVkIHN1YnN0
aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4
cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmco
IiIpIDogYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIi
KSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9GbGFncyk7CiAgICAgICAgIGlm
ICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZy0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICB9CkBA
IC04OTMsNyArODgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC05MjUsNyArOTEzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiAgICAgLy8gMi4gTGV0IFMg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBnaXZpbmcgaXQgdGhlIHRoaXMgdmFs
dWUgYXMgaXRzIGFyZ3VtZW50LgogICAgIC8vIDYuIExldCBzIGJlIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyBpbiBTLgotICAgIFVTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAKICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5
IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhl
IHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgpAQCAtMTAyNyw3
ICsxMDE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVVN0cmluZyBzZXBh
cmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBz
ZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAK
ICAgICAgICAgLy8gOS4gSWYgbGltID09IDAsIHJldHVybiBBLgogICAgICAgICBpZiAoIWxpbWl0
KQpAQCAtMTExNCw3ICsxMTAyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgICAgICAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICB9IGVsc2UgewotICAgICAgICB1U3RyaW5nID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKQEAgLTExNDQsMjQgKzExMzIsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlu
dCBsZW47Ci0gICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gMDsKLSAgICBVU3RyaW5nIHVTdHJpbmc7
Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGpzU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8SlNTdHJpbmcqPih0aGlzVmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBsZW4gPSBq
c1N0cmluZy0+bGVuZ3RoKCk7Ci0gICAgfSBlbHNlIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICAvLyBDaGVja09iamVjdENvZXJjaWJsZQorICAgIGlmICh0aGlz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
dVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKLSAgICB9CisKKyAgICBK
U1N0cmluZyoganNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpT
VmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBpbnQgbGVuID0ganNTdHJpbmctPmxl
bmd0aCgpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91
YmxlIGVuZDsKQEAgLTExODUsOSArMTE2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICB9CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nU3RhcnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwogICAgIHVuc2lnbmVkIHN1YnN0cmluZ0xlbmd0aCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpIC0gc3Vic3RyaW5nU3RhcnQ7Ci0gICAgaWYgKGpz
U3RyaW5nKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMs
IGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFy
dCwgc3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0
cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJD
YXNlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTExOTUsNyArMTE3Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLmlzU3RyaW5nKCkgPyBhc1N0
cmluZyh0aGlzVmFsdWUpIDoganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBj
b25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBz
Lmxlbmd0aCgpOwpAQCAtMTIxNCw3ICsxMTkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tP
YmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUuaXNTdHJpbmcoKSA/IGFzU3RyaW5nKHRoaXNW
YWx1ZSkgOiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIEpT
U3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJp
bmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKIAogICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7
CkBAIC0xMjU3LDEwICsxMjM1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29l
cmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobG9jYWxl
Q29tcGFyZShzLCBhMC50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0JpZyhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMjY4LDcgKzEyNDYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+
IiwgcywgIjwvYmlnPiIpKTsKIH0KIApAQCAtMTI3Nyw3ICsxMjU1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c21h
bGw+IiwgcywgIjwvc21hbGw+IikpOwogfQogCkBAIC0xMjg2LDcgKzEyNjQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxibGluaz4iLCBzLCAiPC9ibGluaz4iKSk7CiB9CiAKQEAgLTEyOTUsNyArMTI3Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPGI+IiwgcywgIjwvYj4iKSk7CiB9CiAKQEAgLTEzMDQsNyArMTI4Miw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiPHR0PiIsIHMsICI8L3R0PiIpKTsKIH0KIApAQCAtMTMxMyw3ICsxMjkxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8aT4iLCBzLCAiPC9pPiIpKTsKIH0KIApAQCAtMTMyMiw3ICsxMzAwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKSk7CiB9CiAKQEAgLTEzMzEsNyArMTMwOSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQogCkBAIC0xMzQwLDcgKzEzMTgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKIH0KIApAQCAtMTM0OSw5ICsxMzI3LDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgY29sb3I9
XCIiLCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgY29s
b3I9XCIiLCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICJcIj4iLCBzLCAiPC9mb250
PiIpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNG
b250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMzU5LDcgKzEzMzcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKICAgICB1aW50MzJfdCBzbWFsbElu
dGVnZXI7CkBAIC0xMzk2LDcgKzEzNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGltcGwpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIiLCBhMC50b1N0cmlu
ZyhleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0xNDA0LDkgKzEzODIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVj
dENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBz
LCAiPC9hPiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyks
ICJcIj4iLCBzLCAiPC9hPiIpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0MTQsOSArMTM5Miw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBVU3RyaW5n
IGxpbmtUZXh0ID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBsaW5rVGV4dCA9IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGxpbmtUZXh0U2l6
ZSA9IGxpbmtUZXh0Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHN0cmluZ1NpemUgPSBzLmxlbmd0
aCgpOwpAQCAtMTQ1OSw3ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJp
bmcoRXhlY1N0YQogewogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFVTdHJpbmcgc3RyID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgc3RyID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICB1bnNp
Z25lZCBsZWZ0ID0gMDsKICAgICBpZiAodHJpbUtpbmQgJiBUcmltTGVmdCkgewogICAgICAgICB3
aGlsZSAobGVmdCA8IHN0ci5sZW5ndGgoKSAmJiBpc1RyaW1XaGl0ZXNwYWNlKHN0cltsZWZ0XSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEpTVXRpbHMuY3BwOgorICAgICAgICAoS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKToK
KwogMjAxMi0wMS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgog
CiAgICAgICAgIEltcGxlbWVudCBhIG5ldyBhbGxvY2F0b3IgZm9yIGJhY2tpbmcgc3RvcmVzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsy
MTUsNyBAQCBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAKICAgICAg
ICAgaWYgKGluVmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBVU3RyaW5nIHVTdHJpbmcgPSBpblZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
ICAgIFVTdHJpbmcgdVN0cmluZyA9IGluVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IFVTdHJpbmdUb0NGU3RyaW5nKHVTdHJpbmcpOwog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjkgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCBy
ZXR1cm4gYSBKU1N0cmluZyogaW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGNhbGwg
dmFsdWUoKSBhZnRlciBjYWxsaW5nIHRvU3RyaW5nKCksIHRvCisgICAgICAgIGNvbnZlcnQgZnJv
bSAiSlMgc3RyaW5nIiAoSlNTdHJpbmcqKSB0byAiQysrIHN0cmluZyIgKFVTdHJpbmcpLCBzaW5j
ZQorICAgICAgICB0b1N0cmluZygpIG5vIGxvbmdlciByZXR1cm5zIGEgIkMrKyBzdHJpbmciLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJv
YXJkOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldERhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VV
UkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb25FdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6aW5pdERldmljZU9yaWVudGF0
aW9uRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3Vt
ZW50OjpzZXRMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6aXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRvY3VtZW50V3JpdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNl
bGVjdGlvbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnQ6
OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckZyb250
ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIcmVmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnNldEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
SG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQYXRobmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRTZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6
c2V0SGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmFzc2lnbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlSW5pdE1l
c3NhZ2VFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNxbCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNTaGFyZWRXb3JrZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6Y2xvc2UpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCk6CisgICAgICAgIChK
U1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24p
OgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW06CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVj
dCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydEFycmF5SW5zdGFuY2VUb0phdmFBcnJheSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICog
YnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNwcDoKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlz
cGF0Y2hWYWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Up
OgorICAgICAgICAoSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAqIGJy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6
Omludm9rZU1ldGhvZCk6CisgICAgICAgICogdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludGVybmFsczo6c2V0VXNlclByZWZlcnJlZExhbmd1
YWdlcyk6CisKIDIwMTItMDEtMjMgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgdW5pdGVJZk5vblplcm8gdG8gdXNlIGlzWmVyby4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRy
PElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlCiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHZhbHVlLnRvSW50MzIoZXhlYykpOwogICAg
IGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KICAgICByZXR1cm4gMDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpw
dXREZWxlZ2F0ZSgKIAogSlNWYWx1ZSBKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSBKU0NsaXBi
b2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZQogICAgIH0KIAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPT0gMSkgewotICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgY2xpcGJv
YXJkLT5jbGVhckRhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVj
U3RhdGUqIAogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCiAgICAgYm9vbCBz
dWNjZXNzOwotICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQtPmdldERhdGEodXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgc3VjY2Vzcyk7CisgICAg
U3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgc3VjY2Vzcyk7CiAgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3
IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICAgICAgcmVw
b3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFyZXR2
YWwuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0
cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVzdWx0ID0gdXN0cmlu
Z1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KIAog
ICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxMDU2NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soRXhlY1N0CiB7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KSk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogfQogCiBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIEpTVmFs
dWUganNEYXRlT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQpAQCAtMTUxLDEw
ICsxNTEsMTAgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRp
b24udG9PYmplY3QoZXhlYyk7CiAgICAgaW50IGxpbmVOdW1iZXIgPSBleGNlcHRpb25PYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lIikpLnRvSW50MzIoZXhlYyk7Ci0gICAg
VVN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkwgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VVUkwiKSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBleGNlcHRpb25Tb3VyY2VVUkwgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJzb3VyY2VVUkwiKSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoRXhjZXB0aW9uQmFzZSogZXhjZXB0
aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24pKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9u
IDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNSArNjAsMTUgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU0RPTUZvcm1EYQogSlNWYWx1ZSBKU0RPTUZvcm1EYXRhOjphcHBlbmQo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikg
ewotICAgICAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICAgICAgaWYgKHZhbHVlLmlu
aGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZTsK
ICAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMyAmJiAhZXhlYy0+YXJn
dW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICAgICAgZmlsZW5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMiku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGltcGwoKS0+YXBwZW5k
KG5hbWUsIHRvQmxvYih2YWx1ZSksIGZpbGVuYW1lKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpbXBsKCktPmFwcGVuZChuYW1lLCB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYykpKTsKKyAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICB9CiAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0
eShKU0NlCiAKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKQogewotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1Rv
U3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0
NjIsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQog
I2VuZGlmCiAKLSAgICBVU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTEyLDcgKzUxMiw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0
YXRlKiBleGUKICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBBdG9taWNT
dHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/
ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKQEAgLTY3OSw3ICs2NzksNyBA
QCBKU1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4CiAgICAgaWYgKCFsaXN0
ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlt
cGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3Ry
aW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlz
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNjkzLDcgKzY5Myw3
IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxp
c3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2Jq
ZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGV4
ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBleGVjLT5h
cmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
dmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6Omlu
dGVydmFsKEV4CiAKIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlv
bkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0
IFN0cmluZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VP
cmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6YWJzb2x1CiAKIEpTVmFsdWUgSlNE
ZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBib29sIGJ1YmJsZXMgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4o
ZXhlYyk7CiAgICAgYm9vbCBjYW5jZWxhYmxlID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpOwogICAgIC8vIElmIGFscGhhLCBiZXRhIG9yIGdhbW1hIGFyZSBudWxsIG9yIHVuZGVm
aW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAK
IHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiB2b2lkIEpTRGljdGlvbmFyeTo6
Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU2NyaXB0VmFsdWUm
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgRnJhbWUqIGxleGljYWxG
cmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzks
NyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgICAg
ICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAmJiBldmVudC0+c3RvcmVzUmVz
dWx0QXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBldmVudC0+c3RvcmVSZXN1bHQodXN0cmlu
Z1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIGV2ZW50
LT5zdG9yZVJlc3VsdCh1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsKICAgICAgICAgICAg
ICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnBy
ZXZlbnREZWZhdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxB
bGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkg
ewogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAg
ICAgICBib29sIG9rOwotICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBJZGVudGlmaWVyOjp0b1VJbnQzMihzdHJpbmcsIG9rKTsKICAgICAgICAgaWYgKG9rKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+
Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpKSk7CkBAIC04Myw4ICs4Myw4
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIFRo
ZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50CiAg
ICAgYm9vbCBvazsKLSAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhl
Yy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICBVU3RyaW5nIHN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykgewogICAgICAgICBpZiAo
Tm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPm5hbWVkSXRlbVdpdGhJbmRleCh1c3RyaW5nVG9BdG9t
aWNTdHJpbmcoc3RyaW5nKSwgaW5kZXgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKQEAg
LTExMywxNSArMTEzLDE1IEBAIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRl
cigKIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYm9vbCBvazsKLSAgICB1aW50MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMy
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLCBvayk7CisgICAgdWludDMyX3QgaW5k
ZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyksIG9rKTsKICAgICBpZiAob2spCiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCktPml0ZW0oaW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0
TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKTsKIH0KIAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBy
ZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNW
YWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQqPihpbXBsKCkpOwotICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBSZWZQ
dHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBpZiAoY29udGV4dElkID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8IGNvbnRleHRJZCA9PSAi
d2Via2l0LTNkIikgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29s
bGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MiwxNSArNzIsMTUgQEAgSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpuYW1l
R2V0dGVyKEV4ZQogSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9V
SW50MzIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICB1aW50MzJf
dCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVy
biBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0
aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAg
IHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEhU
TUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsMTQgKzEzNiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9j
dW1lbnRXcml0ZShFeGVjU3RhCiAKICAgICBzaXplX3Qgc2l6ZSA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKIAotICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpcnN0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50
ZWRTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcoZmlyc3RTdHJpbmcpOwogICAgIGlmIChzaXplICE9
IDEpIHsKICAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNs
ZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcg
PSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3Ry
aW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdt
ZW50ZWRTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHN1YnNlcXVlbnRTdHJpbmcpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TElucHV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEpTSFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uRGlyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnB1dC0+
c2V0U2VsZWN0aW9uRGlyZWN0aW9uKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KSkpOworICAgIGlucHV0LT5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjKQpAQCAtOTcsNyAr
OTcsNyBAQCBKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uCiAKICAgICBp
bnQgc3RhcnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgIGludCBlbmQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIFN0cmluZyBkaXJlY3Rpb24g
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAg
IFN0cmluZyBkaXJlY3Rpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIGlucHV0LT5zZXRTZWxlY3Rpb25SYW5n
ZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q29uCiAgICAgICAgIGlmICghdHlwZS5pc1N0cmluZygpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHR5cGVTdHJpbmcgPSB1c3RyaW5nVG9TdHJp
bmcodHlwZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyB0eXBlU3RyaW5nID0gdXN0
cmluZ1RvU3RyaW5nKHR5cGUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
aWYgKHR5cGVTdHJpbmcgPT0gInNlcGFyYXRvciIpIHsKICAgICAgICAgICAgIGl0ZW1zLmFwcGVu
ZChuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBl
ZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSogbWVudUl0ZW0gPSBuZXcgQ29udGV4dE1lbnVJdGVtKCh0eXBlU3RyaW5nID09ICJjaGVja2Jv
eCIgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlwZSksIHR5cGVkSWQsIHVzdHJpbmdU
b1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtKiBtZW51SXRlbSA9IG5ldyBDb250ZXh0TWVudUl0ZW0oKHR5cGVTdHJpbmcgPT0gImNoZWNr
Ym94IiA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlKSwgdHlwZWRJZCwgdXN0cmlu
Z1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAg
ICAgaWYgKCFlbmFibGVkLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgbWVudUl0ZW0t
PnNldEVuYWJsZWQoZW5hYmxlZC50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICAgICAgaWYgKCFj
aGVja2VkLmlzVW5kZWZpbmVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxG
cmFtZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGltcGwoKS0+ZXZhbHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIGV4
Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZXhjZXB0aW9uKTsKIAogICAg
IGlmIChleGNlcHRpb24pCiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgZXhjZXB0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6ZGVmaW5lR2V0dGVyKEpTT2JqZWN0KiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRI
cmVmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhyZWYg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGhyZWYgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIcmVmKHVzdHJpbmdUb1N0cmluZyhocmVmKSwg
YWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0xODcsNyAr
MTg3LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lk
IEpTTG9jYXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBVU3RyaW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBwcm90b2NvbCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFByb3Rv
Y29sKEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGltcGwoKS0+c2V0SG9zdCh1c3RyaW5nVG9TdHJpbmcoaG9zdCksIGFjdGl2ZURPTVdpbmRvdyhl
eGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRI
b3N0bmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBo
b3N0bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaG9zdG5hbWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIb3N0bmFtZSh1c3RyaW5n
VG9TdHJpbmcoaG9zdG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93
KGV4ZWMpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3RuYW1l
KEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwb3J0ID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBwb3J0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwoKS0+c2V0UG9ydCh1c3RyaW5nVG9TdHJpbmcocG9ydCksIGFjdGl2ZURPTVdpbmRvdyhleGVj
KSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRo
bmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwYXRo
bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRQYXRobmFtZSh1c3RyaW5nVG9T
dHJpbmcocGF0aG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4
ZWMpKTsKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4
ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsKCktPnNldFNlYXJjaCh1c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVE
T01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIzNyw3ICsyMzcsNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4CiAKIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0
cmluZyBoYXNoID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBoYXNoID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0SGFzaCh1c3RyaW5nVG9TdHJp
bmcoaGFzaCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpA
QCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4
ZWMKIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5yZXBsYWNlKHVzdHJpbmdUb1N0cmluZyh1
cmxTdHJpbmcpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsK
QEAgLTI2MCw3ICsyNjAsNyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUq
IGV4CiAKIEpTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5hc3NpZ24odXN0cmluZ1RvU3RyaW5nKHVy
bFN0cmluZyksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEw
MiwxMSBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojpwb3J0cyhFeGVjU3RhdGUqCiAKIHN0YXRp
YyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNF
dmVudCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgVVN0cmluZyYgdHlwZUFy
ZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcm
IHR5cGVBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgYm9vbCBjYW5CdWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhl
Yyk7CiAgICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIG9yaWdpbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDQp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhl
Yy0+YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgb3JpZ2lu
QXJnID0gZXhlYy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gdG9ET01X
aW5kb3coZXhlYy0+YXJndW1lbnQoNikpOwogICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBt
ZXNzYWdlUG9ydHM7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4
ZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3Fs
U3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODEsNyAr
ODEsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3Ry
aW5nIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZh
bHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2Fj
dGlvblN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNx
bAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3Fs
U3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODAsNyAr
ODAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsCiAgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3Ry
aW5nIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZh
bHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTU2hhcmVkV29yCiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVT
dHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgVVN0cmluZyBuYW1lOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPiAxKQotICAgICAgICBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7
CisgICAgICAgIG5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBl
CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhh
c1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJp
bmcoZXhlYykpOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3
ICsyNDEsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlCiAgICAg
ICAgIHJldHVybiB0aHJvd1N5bnRheEVycm9yKGV4ZWMpOwogCiAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1w
bCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQtPmdldEV4dGVu
c2lvbihuYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCAid3JvbmcgVVJMIikpOwogICAgIFJlZlB0cjxXZWJTb2Nr
ZXQ+IHdlYlNvY2tldCA9IFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQpOwpAQCAtNzMsMTQgKzcz
LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJTb2NrZXQKICAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHByb3RvY29sczsKICAgICAgICAgICAgIEpTQXJyYXkqIHByb3Rv
Y29sc0FycmF5ID0gYXNBcnJheShwcm90b2NvbHNWYWx1ZSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9jb2xzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzQXJy
YXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
cHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5n
LCBwcm90b2NvbHMsIGVjKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBw
cm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKSk7
CisgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBw
cm90b2NvbCwgZWMpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIEpTVmFsdWUgSlNXZWJTb2NrZXQ6OnNl
bmQoRXhlY1N0YXRlKiBleGUKICAgICBlbHNlIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6
OnNfaW5mbykpCiAgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSks
IGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5n
VG9TdHJpbmcobWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIFN0cmluZyBzdHJpbmdN
ZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5nKG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZChzdHJpbmdN
ZXNzYWdlLCBlYyk7CkBAIC0xMzUsNyArMTM1LDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6Y2xv
c2UoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgeCA9IGNsYW1wVG8oeCwgbWluVmFsdWUsIG1h
eFZhbHVlKTsKICAgICAgICAgY29kZSA9IGNsYW1wVG9JbnRlZ2VyKHgpOwogICAgICAgICBpZiAo
YXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgICAgICByZWFzb24gPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVhc29u
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29u
dGV4dDo6aW1wb3J0U2NyaXB0cyhFCiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAg
ICAgICB1cmxzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYykpKTsKKyAgICAgICAgdXJscy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dvcmtlckNvbgogICAgIGlmICghZXhlYy0+YXJndW1lbnRD
b3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CiAKLSAgICBVU3RyaW5nIHNjcmlwdFVS
TCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc2NyaXB0
VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDggKzg1LDggQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVu
KEV4ZWNTdGF0ZQogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3Vn
aCBhcmd1bWVudHMiKSk7CiAKLSAgICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYg
dXJsID0gaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KTsKKyAgICBTdHJpbmcgbWV0aG9kID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKQEAgLTEyOSw3ICsxMjks
NyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgIGVs
c2UgaWYgKHZhbC5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAg
IGltcGwoKS0+c2VuZCh0b0FycmF5QnVmZmVyKHZhbCksIGVjKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgaW1wbCgpLT5zZW5kKHVzdHJpbmdUb1N0cmluZyh2YWwudG9TdHJpbmcoZXhlYykp
LCBlYyk7CisgICAgICAgICAgICBpbXBsKCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBlYyk7CiAgICAgfQogCiAgICAgaW50IHNpZ25lZExp
bmVOdW1iZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDkgKzg5LDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihF
eAogewogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGV4
ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNlcHRpb24/Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAg
U3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0
cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyB2YWx1ZSA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgIGltcGwoKS0+c2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDAsOCArMTAwLDggQEAg
SlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeAogewogICAgIGlmIChleGVj
LT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJp
bmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIFN0cmluZyB2YWx1ZSA9IGltcGwoKS0+Z2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9j
YWxOYW1lKTsKICAgICByZXR1cm4ganNTdHJpbmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7CiB9
CkBAIC0xMTAsOCArMTEwLDggQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFt
ZXRlcgogewogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBT
dHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5n
IGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGltcGwoKS0+cmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFj
ZVVSSSwgbG9jYWxOYW1lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNp
b24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBQYXNzT3duUHRyPFNjaGVkdWxl
ZEFjdGlvbj4gU2NoZWR1bGVkQWN0CiAgICAgaWYgKGdldENhbGxEYXRhKHYsIGNhbGxEYXRhKSA9
PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2
YWwoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBVU3RyaW5nIHN0cmlu
ZyA9IHYudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFNjaGVkdWxlZEFjdGlvbih1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKSwgaXNvbGF0ZWRXb3JsZCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDggQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudAogICAgIEpTQzo6
SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsK
ICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKGpzRnVuY3Rpb24tPnRvU3RyaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUoanNM
aXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLCBkb2N1bWVudCkpKTsKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Ob2RlKGpzTGlzdGVuZXItPmlzb2xhdGVkV29y
bGQoKSwgZG9jdW1lbnQpOworICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+
dG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1ZShzY3JpcHRTdGF0ZSkpOwogfQogCiBib29sIGV2
ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExpc3Rl
bmVyKiBldmVudExpc3RlbmVyLCBTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRT
dHJpbmcoU2NyaXB0U3RhdGUqCiAKIFN0cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogewotICAgIFN0cmluZyByZXN1bHQgPSB1c3RyaW5n
VG9TdHJpbmcobV92YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSkpOworICAgIFN0cmlu
ZyByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcobV92YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRT
dGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0
aGUgb2JqZWN0LgogICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHNjcmlwdFN0YXRlLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDEwNTY0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgRU5ECiAgICAgSlNWYWx1ZSBsaXN0
ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBs
LT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhl
YykpJHBhc3NSZWZQdHJIYW5kbGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21p
Y1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIEVORAogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1w
bDsKQEAgLTI5MTIsNyArMjkxMiw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBpZiAoJHR5
cGUgZXEgIkRPTVN0cmluZyIpIHsKICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ29udmVydE51bGxUb051bGxTdHJpbmcifSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmVmbGVjdCJ9OwogICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKLSAgICAg
ICAgcmV0dXJuICJ1c3RyaW5nVG9TdHJpbmcoJHZhbHVlLmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6
ICR2YWx1ZS50b1N0cmluZyhleGVjKSkiOworICAgICAgICByZXR1cm4gInVzdHJpbmdUb1N0cmlu
ZygkdmFsdWUuaXNFbXB0eSgpID8gVVN0cmluZygpIDogJHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewpA
QCAtMzQ5Miw3ICszNDkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0
cnVjdAogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2Np
YXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsKIAotICAgIEF0b21pY1N0
cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9B
dG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90
ZXN0YmluZGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0
YmluZGluZ3MuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
dGVzdGJpbmRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdykgewogICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSBleFZhbCA9IGNvbXAudmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAq
bXNnID0gZXhWYWwudG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2hhciogbXNnID0gZXhWYWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8gPSAtMTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGV4VmFsLnR5cGUoKSA9PSBPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSBsaW5lVmFsID0gT2JqZWN0OjpkeW5hbWljQ2FzdChleFZhbCkuZ2V0KGV4ZWMsSWRl
bnRpZmllcigibGluZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0cXRiaW5k
aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RxdGJpbmRp
bmdzLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3Rx
dGJpbmRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgp
ID09IFRocm93KSB7CiAgICAgICAgICAgICAgICAgcURlYnVnKCkgPDwgImV4Y2VwdGlvbiB0aHJv
d24iOwogICAgICAgICAgICAgICAgIEpTVmFsdWUqIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGNoYXIqIG1zZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS5hc2NpaSgpOwor
ICAgICAgICAgICAgICAgIGNoYXIqIG1zZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuYXNjaWkoKTsKICAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gLTE7CiAgICAgICAg
ICAgICAgICAgaWYgKGV4VmFsLT50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlKiBsaW5lVmFsID0gZXhWYWwtPmdldE9iamVjdCgpLT5nZXQoZXhlYywg
SWRlbnRpZmllcigibGluZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRp
bGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5
LmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGls
aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogCiAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7
CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nIHVzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSB1
c3RyaW5nLnV0ZjgoKTsKICAgICAgICAgTlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4
Kiljc3RyaW5nLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNzdHJpbmcubGVuZ3RoKCkp
IH07CiAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwg
JnN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNv
YmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw3ICs0ODgsNyBAQCBqb2JqZWN0IEphdmFK
U09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqCiAgICAgICAgICAgICByZXN1bHQgPSBlbnYtPk5l
d09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJRCwgKGpkb3VibGUpdmFsdWUudG9O
dW1iZXIoZXhlYykpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgcmVz
dWx0ID0gZW52LT5OZXdTdHJpbmcgKChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nVmFsdWUubGVuZ3RoKCkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29s
ZWFuKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQ
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
TklVdGlsaXR5UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNyArNjMsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAg
ICAgICAgICAgICAgICAgICAgIGVudi0+TmV3U3RyaW5nVVRGKCIiKSk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0udG9TdHJpbmcoZXhlYyk7CisgICAg
ICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVs
ZW1lbnQoamFycmF5LCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMt
Pk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwg
c3RyaW5nVmFsdWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICB9CkBAIC05OCw3ICs5OCw3
IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgICAg
IGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
ICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgICAgICAgICAgICAgamNoYXIgdmFsdWUgPSAwOwogICAgICAgICAgICAgICAg
IGlmIChzdHJpbmdWYWx1ZS5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gKChjb25zdCBqY2hhciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpKVswXTsKQEAgLTI0OSw3
ICsyNDksNyBAQCBqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBlCiAgICAg
ICAgICAgICAvLyBjb252ZXJ0aW5nIGZyb20gYSBudWxsLgogICAgICAgICAgICAgaWYgKCFyZXN1
bHQubCAmJiAhc3RyY21wKGphdmFDbGFzc05hbWUsICJqYXZhLmxhbmcuU3RyaW5nIikpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsK
ICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMt
Pk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBz
dHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2
YVN0cmluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpT
Qy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZp
ZWxkSlNDLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YUZpZWxkSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBq
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhCiAgICAgICAgICAgICAgICAg
YXJnc1swXS5sID0gamluc3RhbmNlOwogICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChl
eGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCBy
ZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwog
ICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlw
dGlvbi50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIEpTVmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGUKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZSBnZXR0aW5nICVzID0gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkp
LnV0ZjgoKS5kYXRhKCksIGpzcmVzdWx0LnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRp
bmcgJXMgPSAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHJl
dHVybiBqc3Jlc3VsdDsKIH0KQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlz
cGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAgICAgICAgICAgICAgICAgYXJnc1sxXSA9IGphdmFWYWx1
ZTsKICAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgSmF2YVR5cGVWb2lkLCBtaWQsIGFy
Z3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlm
IChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVj
KSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQg
SmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1MKICAgICBjb25zdCBKYXZhSW5zdGFu
Y2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlKj4oaSk7CiAgICAg
anZhbHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGktPnJvb3RPYmpl
Y3QoKSwgYVZhbHVlLCBtX3R5cGUsIHR5cGVDbGFzc05hbWUoKSk7CiAKLSAgICBMT0coTGl2ZUNv
bm5lY3QsICJKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSBzZXR0aW5nIHZhbHVlICVzIHRv
ICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBhVmFsdWUudG9TdHJp
bmcoZXhlYykuYXNjaWkoKS5kYXRhKCkpOworICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNldHRpbmcgdmFsdWUgJXMgdG8gJXMiLCBVU3RyaW5nKG5h
bWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCksIGFWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEphdmFUeXBlQXJyYXk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NCw3ICsxOTQsNyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNT
CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgQ1N0cmluZyBqYXZh
Q2xhc3NOYW1lID0gak1ldGhvZC0+cGFyYW1ldGVyQXQoaSkudXRmOCgpOwogICAgICAgICBqQXJn
c1tpXSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIG1fcm9vdE9iamVjdC5nZXQoKSwgZXhl
Yy0+YXJndW1lbnQoaSksIGphdmFUeXBlRnJvbUNsYXNzTmFtZShqYXZhQ2xhc3NOYW1lLmRhdGEo
KSksIGphdmFDbGFzc05hbWUuZGF0YSgpKTsKLSAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2
YUluc3RhbmNlOjppbnZva2VNZXRob2QgYXJnWyVkXSA9ICVzIiwgaSwgZXhlYy0+YXJndW1lbnQo
aSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coTGl2ZUNvbm5l
Y3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBleGVjLT5h
cmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwog
ICAgIH0KIAogICAgIGp2YWx1ZSByZXN1bHQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjUwogICAgICAgICBqbWV0aG9kSUQgbWV0aG9k
SWQgPSBnZXRNZXRob2RJRChvYmosIGpNZXRob2QtPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBqTWV0
aG9kLT5zaWduYXR1cmUoKSk7CiAgICAgICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhl
Yywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwg
ak1ldGhvZC0+cmV0dXJuVHlwZSgpLCBtZXRob2RJZCwgakFyZ3MuZGF0YSgpLCByZXN1bHQsIGNh
bGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwCShyZXZpc2lvbiAxMDU2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw3ICszNDMsNyBAQCBRVmFy
aWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAq
KGNvbnN0IHVzaG9ydCopc3RyLmltcGwoKS0+Y2hhcmFjdGVycygpIDogMCkpOwogICAgICAgICAg
ICAgICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7
CkBAIC0zNTgsNyArMzU4LDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVj
U3RhdAogICAgICAgICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwogICAgICAgICAgICAgICAg
IHJldHVybiBRU3RyaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmlu
Zy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CkBA
IC00MzksNyArNDM5LDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3Rh
dAogICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0
KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
cXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVy
cygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHFzdHJpbmcpOwpAQCAtNDUzLDcgKzQ1Myw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0
aCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxl
bmd0aCgpKTsKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwpA
QCAtNDYyLDcgKzQ2Miw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0
YXQKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQot
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChj
b25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgo
KSk7CiAgICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OwogICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CkBAIC00NzgsNyArNDc4LDcgQEAgUVZhcmlhbnQgY29u
dmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KFFCeXRlQXJyYXkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkp
LCBhcnItPmxlbmd0aCgpKSk7CiAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChR
U3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmlu
Zy5sZW5ndGgoKSkudG9MYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3Ry
aW5nKQogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAg
fQogI2lmbmRlZiBRVF9OT19EQVRFU1RSSU5HCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1
c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlw
ZTo6UURhdGVUaW1lKSB7CkBAIC01NzEsNyArNTcxLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVl
VG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIFJlZ0V4cE9iamVjdCAqcmUgPSBz
dGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOwogKi8KICAgICAgICAgICAgICAgICAv
LyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBhIGJpdCByaXNreQotICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAg
ICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5p
bXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgICAgICAg
ICAvLyB0aGlzIGlzIG9mIHRoZSBmb3JtICcveHh4eHh4L2knCkBAIC01OTEsNyArNTkxLDcgQEAg
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAg
ICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0IHBhcnNlIGEgSlMgcmVnZXhwIjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNv
bnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgp
KTsKIAogICAgICAgICAgICAgICAgIFFSZWdFeHAgcmUocXN0cmluZyk7CkBAIC0xNTk5LDcgKzE1
OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNPYmo7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5n
IGZ1bmNOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBmdW5jSWRlbnQoZXhlYywgZnVu
Y05hbWUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVy
bmFsc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0lu
dGVybmFsczo6c2V0VXNlclByZWZlcnJlZExhbmd1YQogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1
YWdlczsKICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcg
bGFuZ3VhZ2UgPSB1c3RyaW5nVG9TdHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gdXN0cmluZ1RvU3RyaW5nKGFycmF5LT5n
ZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBsYW5ndWFn
ZXMuYXBwZW5kKGxhbmd1YWdlKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3Ry
aW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVy
IGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmci
IChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRv
U3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50
KToKKwogMjAxMi0wMS0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBXZWJLaXQyIHJlbWVtYmVyIHRoZSBoZWlnaHQgb2YgdGhlIFdlYiBJbnNw
ZWN0b3Igd2hlbiBpdCBpcyBkb2NrZWQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Myw3ICsxNjMsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVU
CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgTlBTdHJpbmcg
bnBTdHJpbmcgPSBjcmVhdGVOUFN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS51dGY4KCkpOwor
ICAgICAgICBOUFN0cmluZyBucFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KCkpOwogICAgICAgICBTVFJJTkdOX1RPX05QVkFSSUFO
VChucFN0cmluZy5VVEY4Q2hhcmFjdGVycywgbnBTdHJpbmcuVVRGOExlbmd0aCwgdmFyaWFudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MDU2NDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMCBAQAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3Ry
aW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVy
IGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmci
IChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRv
U3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
OndpdGhHbG9iYWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKwogMjAxMi0wMS0yMCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgV2ViQ29yZSBSdW5Mb29wIHdv
cmsgZm9yIFdlYktpdDEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlz
aW9uIDEwNTY0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1OCw3ICsxMjU4LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbAogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5cGVdXTsKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpXTsKKyAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDp1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KV07CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIFthcnJheSBh
ZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6RG91YmxlVmFsdWVUeXBlXV07CiAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUudG9O
dW1iZXIoZXhlYyldXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
cmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAiIjsKIAogICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhy
ZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiAt
IChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFBvc2l0aW9uJilwb3MgYWZmaW5p
dHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKQEAgLTExOTEsNyArMTE5Miw4IEBAIC0g
KE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAi
IjsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJu
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoYW55V29ybGRHbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiAtIChKU0dsb2JhbENvbnRleHRSZWYp
X2dsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNlL1dlYktp
dC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjA0LDcgKzI2MDQsOCBAQCBI
UkVTVUxUIFdlYkZyYW1lOjpzdHJpbmdCeUV2YWx1YXRpbmdKYXZhCiAgICAgICAgIHJldHVybiBT
X09LOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBTdHJp
bmcgcmVzdWx0U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhhbnlXb3Js
ZEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gYW55
V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
ID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgICpldmFsdWF0aW9uUmVzdWx0ID0gQlN0cmluZyhyZXN1bHRTdHJpbmcpLnJlbGVhc2UoKTsK
IAogICAgIHJldHVybiBTX09LOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123662</attachid>
            <date>2012-01-23 16:51:46 -0800</date>
            <delta_ts>2012-01-23 17:23:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123165145.patch</filename>
            <type>text/plain</type>
            <size>150025</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtNTY2LDEzICs1NjYsMTMgQEAgX19aTkszSlNDMTlTb3VyY2VQcm92aWRlckNhY2hl
OGJ5dGVTaXplRQogX19aTkszSlNDNkpTQ2VsbDExdG9QcmltaXRpdmVFUE5TXzlFeGVjU3RhdGVF
TlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBlRQogX19aTkszSlNDNkpTQ2VsbDh0b051bWJlckVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOSzNKU0M2SlNDZWxsOHRvU3RyaW5nRVBOU185RXhl
Y1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0M2SlNDZWxsOWdldFN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVSTlNfN1VTdHJpbmdFCiBfX1pO
SzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTQXJyYXkxMnN1YmNsYXNz
RGF0YUV2CiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9OdW1iZXJTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0
ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMTZ0b09iamVjdFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRVBO
U18xNEpTR2xvYmFsT2JqZWN0RQorX19aTkszSlNDN0pTVmFsdWUxNnRvU3RyaW5nU2xvd0Nhc2VF
UE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE5c3ludGhlc2l6ZVByb3RvdHlwZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMjB0b1RoaXNPYmplY3RTbG93Q2FzZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGF0
ZUUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmkKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBwdXRjaGFyKCcgJyk7CiAKLSAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMt
PmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwcmlu
dGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHB1dGNoYXIoJ1xuJyk7CkBAIC0yNDgsNyArMjQ4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzXG4iLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS51dGY4KCkuZGF0YSgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xuIiwg
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTI3Nyw3ICsyNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVy
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYg
KCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBm
aWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxl
LiIpKSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFy
PiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1l
LCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTQ4Nyw5
ICs0ODcsOSBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICBp
ZiAoZHVtcCkgewogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24u
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJp
bnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIGdsb2JhbERhdGEuc3RvcFNhbXBsaW5nKCk7CkBAIC01
NDYsOSArNTQ2LDkgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0Kgog
ICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBqc2NTb3VyY2UobGlu
ZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRp
b24pOwogI2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAg
ICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5n
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNyAr
MjkzLDcgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAogCiAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCi0gICAgUmVmUHRyPE9w
YXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3Bh
cXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9u
KQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZGVmCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDggKzMzOSw2IEBAIEVYUE9SVFMKICAgICA/dG9OdW1iZXJTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvT2JqZWN0QEpT
Q2VsbEBKU0NAQFFCRVBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmpl
Y3RAMkBAWgogICAgID90b09iamVjdFNsb3dDYXNlQEpTVmFsdWVASlNDQEBBQkVQQVZKU09iamVj
dEAyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAgICA/dG9TdHJpbmdA
SlNDZWxsQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP3RvU3Ry
aW5nQEpTT2JqZWN0QEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAg
P3RvU3RyaW5nRGVjaW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9T
dHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9U
aGlzT2JqZWN0QEpTT2JqZWN0QEpTQ0BAU0FQQVYxMkBQQVZKU0NlbGxAMkBQQVZFeGVjU3RhdGVA
MkBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBVU3Ry
aW5nIHZhbHVlVG9Tb3VyY2VTdHJpbmcoRXhlY1MKICAgICAgICAgcmV0dXJuICIwIjsKIAogICAg
IGlmICh2YWwuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVU3RyaW5nKCJcIiIsIGVz
Y2FwZVF1b3Rlcyh2YWwudG9TdHJpbmcoZXhlYykpLCAiXCIiKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVU3RyaW5nKCJcIiIsIGVzY2FwZVF1b3Rlcyh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSwgIlwiIik7CiAKICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uKCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEw
NTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IERGR19PUEVSQVRJT04gCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcg
dGhyb3dzIGFuIGV4Y2VwdGlvbi4KLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKCFnbG9iYWxEYXRhLT5leGNlcHRp
b24pIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc3RyaWN0KTsKICAgICAgICAgYmFz
ZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwpAQCAtMjU5LDExICsyNTksOCBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgCiAgICAgQVNT
RVJUKCFvcDEuaXNOdW1iZXIoKSB8fCAhb3AyLmlzTnVtYmVyKCkpOwogICAgIAotICAgIGlmIChv
cDEuaXNTdHJpbmcoKSkgewotICAgICAgICBpZiAob3AyLmlzU3RyaW5nKCkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSksIGFz
U3RyaW5nKG9wMikpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBhc1N0cmluZyhvcDEpLCBvcDIudG9QcmltaXRpdmVTdHJpbmcoZXhlYykpKTsKLSAgICB9
CisgICAgaWYgKG9wMS5pc1N0cmluZygpICYmICFvcDIuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBhc1N0cmluZyhvcDEpLCBvcDIudG9T
dHJpbmcoZXhlYykpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNBZGRTbG93Q2Fz
ZShleGVjLCBvcDEsIG9wMikpOwogfQpAQCAtMzA2LDcgKzMwMyw3IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgfQogICAgIH0KIAotICAgIElkZW50
aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZp
ZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQpKTsKIH0K
IApAQCAtMzI2LDcgKzMyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2UKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9
CiAKLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChl
eGVjLCBpZGVudCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDMsMTAgKzEzMDMsOCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSB2MiA9IHN0YWNrRnJh
bWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKIAotICAgIGlmICh2MS5pc1N0cmluZygpKSB7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gdjIuaXNTdHJpbmcoKQotICAgICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJh
bWUsIGFzU3RyaW5nKHYxKSwgYXNTdHJpbmcodjIpKQotICAgICAgICAgICAgOiBqc1N0cmluZyhj
YWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgdjIudG9QcmltaXRpdmVTdHJpbmcoY2FsbEZyYW1lKSk7
CisgICAgaWYgKHYxLmlzU3RyaW5nKCkgJiYgIXYyLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwgdjIudG9TdHJp
bmcoY2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0yNDYxLDcg
KzI0NTksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAgICAgCi0gICAgSWRl
bnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUp
KTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5n
KGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFz
ZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTI0ODgs
NyArMjQ4Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92
YWwpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgIElk
ZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1l
KS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSk7CiAgICAgfQogICAgIApAQCAtMjUxOCw3ICsyNTE2LDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICBpZiAoIWlzSlNC
eXRlQXJyYXkoYmFzZVZhbHVlKSkKICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlv
blB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIElkZW50aWZp
ZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7Cisg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmco
Y2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1
ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7CiAgICAgfQogICAgIApAQCAtMjU3OSw3ICsyNTc3
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNj
cmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShj
YWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
KTsKICAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBE
b24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9w
ZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMjYyMCw3ICsyNjE4LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsKSk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2Fs
bEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJh
bWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRo
cmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1
ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMzM4Niw3ICszMzg0
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGlmIChw
cm9wTmFtZS5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaSkpKTsKIAotICAgIElkZW50
aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpKTsK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgcHJvcE5hbWUudG9TdHJpbmcoY2Fs
bEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5
KGNhbGxGcmFtZSwgcHJvcGVydHkpKSk7CiB9CkBAIC0zNDk4LDcgKzM0OTYsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJlc3VsdCA9IGJhc2VP
YmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBjYWxsRnJh
bWUsIGkpOwogICAgIGVsc2UgewogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2Fs
bEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3Jp
cHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgY2FsbEZyYW1lLCBwcm9wZXJ0eSk7CiAgICAgfQpA
QCAtMzUzOSw3ICszNTM3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3df
cmVmZQogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgVVN0cmluZyBtZXNz
YWdlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b1N0cmluZyhjYWxsRnJhbWUpOwor
ICAgIFVTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9TdHJp
bmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKTsKICAgICBzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7
CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBVU3RyaW5nIHN0
ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyID0gZWxlbWVu
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIHN0ckJ1ZmZlcltrXSA9IHN0
ci5pbXBsKCk7CiAgICAgICAgIHRvdGFsU2l6ZSArPSBzdHIubGVuZ3RoKCk7CiAgICAgICAgIGFs
bFN0cmluZ3M4Qml0ID0gYWxsU3RyaW5nczhCaXQgJiYgc3RyLmlzOEJpdCgpOwpAQCAtMjcyLDkg
KzI3Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCi0gICAgICAgICAgICAgICAgc3RyID0gY2Fs
bChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwg
ZXhlYy0+ZW1wdHlMaXN0KCkpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIHN0ciA9
IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1l
bnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RyID0gZWxlbWVudC50b1N0cmluZyhleGVj
KTsKKyAgICAgICAgICAgICAgICBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoc3RyKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTI5Nyw3ICsyOTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAKICAgICBVU3RyaW5nIHNlcGFyYXRvcjsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHNlcGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBrID0gMDsKICAgICBp
ZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CkBAIC0zMDgsNyArMzA4LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIGdvdG8gc2tpcEZp
cnN0TG9vcDsKICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChr
KTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgICAgICAgICBrKys7CiAgICAgICAgIH0KIApAQCAtMzE5LDcgKzMxOSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
ICAgICBzdHJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5k
KGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKysp
IHsKQEAgLTMyOCw3ICszMjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChzZXBhcmF0b3IpOwogICAg
ICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDMsNyAr
MzQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAg
ICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYg
KCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBzdHJCdWZmZXIuYXBw
ZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVu
ZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzdHJCdWZmZXIuYnVpbGQoZXhlYykpOwpAQCAtNDI5LDcgKzQy
OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVu
Z3RoICsgbiwgZXhlYy0+YXJndW1lbnQobikpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nh
c3Q8aW50NjRfdD4obikpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIg
cHJvcGVydHlOYW1lKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSAr
IHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZXhlYy0+YXJndW1lbnQobiksIHNsb3QpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGlubGluZSBi
b29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICBpZiAocHJvcE5hbWUuZ2V0VUlu
dDMyKGkpKQogICAgICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgaSk7CiAK
LSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMsIHByb3BOYW1lLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMsIHByb3BOYW1lLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywg
cHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUs
NyArMTg1LDcgQEAgQ2FsbFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKUwogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQsMTMgKzE1NCwxMyBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2Nh
bGVEYXRlKEV4ZWNTdGF0CiAgICAgYm9vbCB1c2VDdXN0b21Gb3JtYXQgPSBmYWxzZTsKICAgICBV
U3RyaW5nIGN1c3RvbUZvcm1hdFN0cmluZzsKIAotICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAo
YXJnMFN0cmluZyA9PSAiY3VzdG9tIiAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSkgewogICAgICAgICB1c2VDdXN0b21Gb3JtYXQgPSB0cnVlOwotICAgICAgICBjdXN0b21Gb3Jt
YXRTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgY3Vz
dG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IExvY2FsZURhdGVBbmRUaW1lICYmICFl
eGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGRhdGVTdHlsZSA9IHN0
eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUpOwotICAgICAgICB0aW1lU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyks
IHRpbWVTdHlsZSk7CisgICAgICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIHRpbWVTdHlsZSk7CiAg
ICAgfSBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlVGltZSAmJiAhZXhlYy0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSkKICAgICAgICAgZGF0ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFy
ZzBTdHJpbmcsIGRhdGVTdHlsZSk7CiAgICAgZWxzZSBpZiAoZm9ybWF0ICE9IExvY2FsZURhdGUg
JiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAxMDU2NTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDE0ICs0MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBtZXNzYWdlKTsKICAgICAgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKICAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBFcnJvckluc3Rh
bmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1
ZSBtZXNzYWdlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJ
bnN0YW5jZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgVVN0cmluZygpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdl
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoKSA6IG1l
c3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgYXBwZW5kU291cmNlVG9NZXNzYWdlKCkgeyByZXR1cm4gbV9hcHBlbmRTb3VyY2VUb01l
c3NhZ2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
clByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICBpZiAo
bmFtZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuYW1lU3RyaW5nID0gIkVycm9yIjsKICAgICBl
bHNlIHsKLSAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IG5hbWVTdHJpbmcgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkBAIC0xMTgsNyArMTE4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogICAgIGlmIChtZXNzYWdlLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSAiIjsKICAgICBlbHNlIHsKLSAgICAgICAg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIG1lc3NhZ2VT
dHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBKU09iamVjdCogY3JlYXRlVW5kZWZpbmVkVmFy
aWFibGVFcnJvcihFCiAgICAgCiBKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3Ry
aW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyks
ICInIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciAnIiwgb3AsICInIik7CisgICAgVVN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSwgIicgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yICciLCBvcCwgIiciKTsK
ICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVz
c2FnZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0
YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01l
c3NhZ2UoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFt
RXJyb3IoRXhlY1N0CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYSBjb25z
dHJ1Y3RvciIpOworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICInIGlzIG5vdCBhIGNvbnN0cnVjdG9y
Iik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJv
ck1lc3NhZ2UpOwogICAgIEFTU0VSVChleGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKICAg
ICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKS0+c2V0QXBwZW5kU291cmNl
VG9NZXNzYWdlKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25z
dHJ1Y3RvckVycm9yKEV4ZQogCiBKU09iamVjdCogY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKSwgIicgaXMgbm90IGEgZnVu
Y3Rpb24iKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwgdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBub3QgYSBmdW5jdGlvbiIpOwog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNz
YWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3Rh
dGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVz
c2FnZSgpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25F
cnJvcihFeGVjU3QKIAogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFr
ZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKSwgIicgaXMgbm90IGFuIG9iamVjdCIp
OworICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICInIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICBKU09i
amVjdCogZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAg
ICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0
PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
MTcgKzk2LDE3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEUKICAg
ICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAgICAgIHByb2dyYW0gPSAiKGZ1bmN0aW9uKCkgeyBc
bn0pIjsKICAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA9PSAxKQotICAgICAgICBwcm9ncmFtID0g
bWFrZVVTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
IlxufSkiKTsKKyAgICAgICAgcHJvZ3JhbSA9IG1ha2VVU3RyaW5nKCIoZnVuY3Rpb24oKSB7ICIs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXG59KSIpOwogICAgIGVs
c2UgewogICAgICAgICBVU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFw
cGVuZCgiKGZ1bmN0aW9uKCIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGFy
Z3Muc2l6ZSgpIC0gMTsgaSsrKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCIpOwot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChpKS50b1N0cmluZyhleGVjKSk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CiAgICAgICAgIH0KICAgICAgICAgYnVpbGRlci5hcHBlbmQoIikgeyAiKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChhcmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChhcmdzLnNpemUoKSAtIDEpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbn0p
Iik7CiAgICAgICAgIHByb2dyYW0gPSBidWlsZGVyLnRvVVN0cmluZygpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAgICAgICAgIGxl
bmd0aCA9IHRhcmdldExlbmd0aCAtIG51bUJvdW5kQXJnczsKICAgICB9CiAKLSAgICBJZGVudGlm
aWVyIG5hbWUoZXhlYywgdGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFt
ZSkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgbmFtZShleGVjLCB0YXJnZXQuZ2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JvdW5kRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCks
IGJvdW5kQXJncywgbGVuZ3RoLCBuYW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gYSB0
b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICB2YWx1ZXNb
aV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICB2YWx1
ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEz
ICsxNDUsNiBAQCBkb3VibGUgSlNDZWxsOjp0b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTT2JqZWN0Kj4odGhpcyktPnRvTnVtYmVyKGV4ZWMp
OwogfQogCi1VU3RyaW5nIEpTQ2VsbDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAot
ewotICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
SlNTdHJpbmcqPih0aGlzKS0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTT2JqZWN0Kj4odGhpcyktPnRvU3RyaW5nKGV4ZWMpOwotfQotCiBKU09iamVjdCog
SlNDZWxsOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3RyaW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIGJvb2wgdG9C
b29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3Vi
bGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGlj
IEpTVmFsdWUgZW5jb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogZG9Ob3RFc2NhcGUp
CiB7Ci0gICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
LSAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCh0cnVlKTsKKyAgICBDU3RyaW5nIGNzdHIgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykudXRmOCh0cnVlKTsK
ICAgICBpZiAoIWNzdHIuZGF0YSgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVVUklFcnJvcihleGVjLCAiU3RyaW5nIGNvbnRhaW5lZCBhbiBpbGxlZ2FsIFVURi0xNiBz
ZXF1ZW5jZS4iKSk7CiAKQEAgLTE0Myw3ICsxNDIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUo
RXhlY1N0YXRlKiBleGVjLCBjCiBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBjaGFyKiBkb05vdFVuZXNjYXBlLCBib29sIHN0cmljdCkKIHsKICAgICBKU1N0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIAogICAgIGlmIChzdHIuaXM4Qml0KCkpCiAgICAg
ICAgIHJldHVybiBkZWNvZGUoZXhlYywgc3RyLmNoYXJhY3RlcnM4KCksIHN0ci5sZW5ndGgoKSwg
ZG9Ob3RVbmVzY2FwZSwgc3RyaWN0KTsKQEAgLTUxMyw3ICs1MTIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgaWYgKCF4LmlzU3RyaW5nKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoeCk7CiAKLSAgICBVU3RyaW5nIHMgPSB4LnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogCiAgICAgaWYgKHMuaXM4Qml0KCkpIHsKICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4g
cHJlcGFyc2VyKGV4ZWMsIHMuY2hhcmFjdGVyczgoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNP
Tik7CkBAIC01NTYsNyArNTU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUAogICAgIH0KIAogICAgIC8vIElmIFRvU3RyaW5nIHRocm93cywgd2Ugc2hvdWxkbid0
IGNhbGwgVG9JbnQzMi4KLSAgICBVU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCkBAIC01NjUsNyArNTY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jUAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZUZsb2F0KGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVj
KQpAQCAtNjIzLDcgKzYyMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0UKICAgICAgICAgIiorLS4vQF8iOwogCiAgICAgSlNTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBpZiAoc3RyLmlzOEJpdCgpKSB7CiAgICAgICAgIGNvbnN0IExDaGFyKiBjID0g
c3RyLmNoYXJhY3RlcnM4KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBzdHIu
bGVuZ3RoKCk7IGsrKywgYysrKSB7CkBAIC02NjIsNyArNjYxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFVTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpbnQgayA9IDA7CiAgICAgaW50IGxlbiA9IHN0ci5sZW5ndGgo
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSB1bndyYXBCb3hlZFByaW1pdGkKICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmTnVtYmVyT2JqZWN0OjpzX2luZm8pKQogICAgICAgICByZXR1cm4ganNOdW1iZXIob2Jq
ZWN0LT50b051bWJlcihleGVjKSk7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlN0cmluZ09i
amVjdDo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIG9iamVjdC0+dG9T
dHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4gb2JqZWN0LT50b1N0cmluZyhleGVjKTsKICAg
ICBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKICAgICAgICAg
cmV0dXJuIG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlOwpAQCAt
MjIzLDI1ICsyMjMsMTIgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhl
YwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBVU3RyaW5nIHByb3BlcnR5TmFtZTsKLSAgICAgICAgICAg
IGlmIChuYW1lLmdldFN0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBwcm9w
ZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG5hbWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgIG1fYXJy
YXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgbmFtZS5h
c051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
ICAgICAgICAgICAgIGlmIChuYW1lLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWFzT2JqZWN0KG5hbWUpLT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjpzX2luZm8pICYmICFhc09i
amVjdChuYW1lKS0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6c19pbmZvKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbmFtZS50
b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBs
YWNlclByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgcHJvcGVydHlOYW1lKSk7CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXIoZXhlYywgbmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODI1LDggKzgxMiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKIHsKICAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVFcnJvcihleGVjLCAiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVy
IikpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBVU3RyaW5n
IHNvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc291cmNlID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDExICs1MTgsMTEgQEAgZG91YmxlIEpTT2Jq
ZWN0Ojp0b051bWJlcihFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBwcmltaXRpdmUudG9OdW1i
ZXIoZXhlYyk7CiB9CiAKLVVTdHJpbmcgSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0pTU3RyaW5nKiBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVy
U3RyaW5nKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiAi
IjsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIHByaW1p
dGl2ZS50b1N0cmluZyhleGVjKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25z
dDsKIAogICAgICAgICAvLyBOT1RFOiBKU09iamVjdCBhbmQgaXRzIHN1YmNsYXNzZXMgbXVzdCBi
ZSBhYmxlIHRvIGdyYWNlZnVsbHkgaGFuZGxlIEV4ZWNTdGF0ZSogPSAwLAogICAgICAgICAvLyBi
ZWNhdXNlIHRoaXMgY2FsbCBtYXkgY29tZSBmcm9tIGluc2lkZSB0aGUgY29tcGlsZXIuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDYgQEAgZG91YmxlIEpTU3RyaW5nOjp0b051bWJl
cihFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBqc1RvTnVtYmVyKHZhbHVlKGV4ZWMpKTsKIH0K
IAotVVN0cmluZyBKU1N0cmluZzo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewot
ICAgIHJldHVybiB2YWx1ZShleGVjKTsKLX0KLQogaW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5n
T2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3Ry
aW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmgJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJs
ZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAgICAgICBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBib29sIGdldFN0cmluZ1Byb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwpAQCAtNDUzLDI0ICs0NTIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBp
c1RydWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFs
c2UuCiAgICAgfQogCi0gICAgaW5saW5lIFVTdHJpbmcgSlNWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorICAgIGlubGluZSBKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBpZiAoaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMt
Pmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKTsKLSAgICAgICAgaWYg
KGlzRG91YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVy
aWNTdHJpbmdzLmFkZChhc0RvdWJsZSgpKTsKLSAgICAgICAgaWYgKGlzVHJ1ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuICJ0cnVlIjsKLSAgICAgICAgaWYgKGlzRmFsc2UoKSkKLSAgICAgICAgICAg
IHJldHVybiAiZmFsc2UiOwotICAgICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gIm51bGwiOwotICAgICAgICBpZiAoaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVy
biAidW5kZWZpbmVkIjsKLSAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJu
IGFzQ2VsbCgpLT50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nU2xvd0Nhc2Uo
ZXhlYyk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0
LDEwICsyMDQsOSBAQCBib29sIEpTVmFsdWU6OmlzVmFsaWRDYWxsZWUoKQogICAgIHJldHVybiBh
c09iamVjdChhc0NlbGwoKSktPmdsb2JhbE9iamVjdCgpOwogfQogCi1KU1N0cmluZyogSlNWYWx1
ZTo6dG9QcmltaXRpdmVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNTdHJpbmcqIEpT
VmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIGlm
IChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0Nl
bGwoKSk7CisgICAgQVNTRVJUKCFpc1N0cmluZygpKTsKICAgICBpZiAoaXNJbnQzMigpKQogICAg
ICAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLm51bWVyaWNTdHJpbmdzLmFkZChhc0ludDMyKCkpKTsKICAgICBpZiAoaXNEb3VibGUoKSkK
QEAgLTIyMiwxMCArMjIxLDExIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1ByaW1pdGl2ZVN0cmlu
ZyhFeGUKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudW5kZWZpbmVkLnVzdHJpbmcoKSk7CiAKICAgICBBU1NFUlQoaXNDZWxsKCkp
OwotICAgIEpTVmFsdWUgdiA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBOb1ByZWZlcmVu
Y2UpOwotICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U1N0cmluZyo+KHYuYXNDZWxsKCkpOwotICAgIHJldHVybiBqc1N0cmluZygmZXhlYy0+Z2xvYmFs
RGF0YSgpLCB2LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gYXNDZWxsKCkt
PnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICBBU1NFUlQo
IXZhbHVlLmlzT2JqZWN0KCkpOworICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhleGVjKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZS5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw4ICsxOTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gdG9OdW1iZXIgY29udmVyc2lvbiBpcyBleHBlY3RlZCB0byBi
ZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2VwdGlvbiBoYXMKICAgICAgICAgLy8gYmVlbiBz
ZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7Ci0gICAgICAgIEpTU3RyaW5nKiB0b1ByaW1pdGl2ZVN0cmluZyhFeGVjU3RhdGUqKSBjb25z
dDsKKyAgICAgICAgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCkBAIC0yNDUs
NiArMjQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgaW5saW5lIGNvbnN0IEpTVmFs
dWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGRvdWJsZSB0b051bWJlclNsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAg
ICBKU1N0cmluZyogdG9TdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0U2xvd0Nhc2UoRXhlY1N0YXRlKiwg
SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIHRvVGhpc09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgICAgIHJhZGl4ID0gc3RhdGljX2Nh
c3Q8aW50PihyYWRpeFZhbHVlLnRvSW50ZWdlcihleGVjKSk7IC8vIG5hbiAtPiAwCiAKICAgICBp
ZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
ZXhlYywganNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcih4KS50b1N0cmluZyhleGVjKSk7CiAKICAgICAvLyBGYXN0IHBh
dGggZm9yIG51bWJlciB0byBjaGFyYWN0ZXIgY29udmVyc2lvbi4KICAgICBpZiAocmFkaXggPT0g
MzYpIHsKQEAgLTQ3NCw3ICs0NzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51
bWJlclByb3RvCiAgICAgaWYgKCF0b1RoaXNOdW1iZXIoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLCB4
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih4KS50b1N0cmluZyhleGVj
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UmVxdWVzdGVkIHByb3BlcnR5IGRlc2NyaXB0b3Igb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBv
YmplY3QuIikpOwotICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSku
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwpAQCAtMjkyLDcg
KzI5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJQcm9wZXJ0aWVzIGNhbiBvbmx5IGJl
IGRlZmluZWQgb24gT2JqZWN0cy4iKSk7CiAgICAgSlNPYmplY3QqIE8gPSBhc09iamVjdChleGVj
LT5hcmd1bWVudCgwKSk7Ci0gICAgVVN0cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmpl
Y3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTE0OSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRh
KGV4ZWMtPmFyZ3VtZW50KDEpLCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJpbnZhbGlk
IGdldHRlciB1c2FnZSIpKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVH
ZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgMCk7CisgICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lR2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIGlmIChnZXRDYWxsRGF0YShleGVjLT5hcmd1bWVudCgxKSwgY2FsbERhdGEpID09
IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVT
eW50YXhFcnJvcihleGVjLCAiaW52YWxpZCBzZXR0ZXIgdXNhZ2UiKSk7Ci0gICAgdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lU2V0dGVyKHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBhc09iamVjdChleGVj
LT5hcmd1bWVudCgxKSksIDApOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmlu
ZVNldHRlcih0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDEpKSwgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtMTcyLDcgKzE3Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG8KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNPYmplY3QtPmxvb2t1cEdldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhpc09iamVjdC0+bG9va3VwR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0xODEsMTMgKzE4MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNPYmplY3QtPmxvb2t1cFNldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGhp
c1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPnBy
b3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpKTsKIH0KIAogLy8gMTUuMi40LjMgT2Jq
ZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDEzICs0NywxMSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxG
CiAgICAgSlNWYWx1ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1
ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CiAKLSAgICBpZiAocDEuaXNTdHJpbmco
KSkgewotICAgICAgICByZXR1cm4gcDIuaXNTdHJpbmcoKQotICAgICAgICAgICAgPyBqc1N0cmlu
ZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwgYXNTdHJpbmcocDIpKQotICAgICAgICAgICAgOiBq
c1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwganNTdHJpbmcoY2FsbEZyYW1lLCBwMi50
b1N0cmluZyhjYWxsRnJhbWUpKSk7Ci0gICAgfQorICAgIGlmIChwMS5pc1N0cmluZygpKQorICAg
ICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhwMSksIHAyLnRvU3RyaW5n
KGNhbGxGcmFtZSkpOworCiAgICAgaWYgKHAyLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBq
c1N0cmluZyhjYWxsRnJhbWUsIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDEudG9TdHJpbmcoY2FsbEZy
YW1lKSksIGFzU3RyaW5nKHAyKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUs
IHAxLnRvU3RyaW5nKGNhbGxGcmFtZSksIGFzU3RyaW5nKHAyKSk7CiAKICAgICByZXR1cm4ganNO
dW1iZXIocDEudG9OdW1iZXIoY2FsbEZyYW1lKSArIHAyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gc3RyaW5nc1tpXS5qc1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAodi5p
c1N0cmluZygpKQotICAgICAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChhc1N0cmluZyh2
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5k
KGpzU3RyaW5nKGdsb2JhbERhdGEsIHYudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgIHJv
cGVCdWlsZGVyLmFwcGVuZCh2LnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAgICAgICAgaWYgKHJv
cGVCdWlsZGVyLmxlbmd0aCgpIDwgb2xkTGVuZ3RoKSAvLyBUcnVlIGZvciBvdmVyZmxvdwogICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CkBAIC05Nywy
MCArOTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBKU1N0cmluZzo6Um9w
ZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOwotCi0gICAgICAgIGlmICh0aGlzVmFs
dWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChhc1N0cmluZyh0
aGlzVmFsdWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5k
KGpzU3RyaW5nKGdsb2JhbERhdGEsIHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAg
ICByb3BlQnVpbGRlci5hcHBlbmQodGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gZXhlYy0+YXJndW1lbnQoaSk7Ci0gICAgICAgICAgICBpZiAodi5pc1N0cmluZygpKQotICAg
ICAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChhc1N0cmluZyh2KSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGpzU3RyaW5nKGdsb2Jh
bERhdGEsIHYudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVu
ZCh2LnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAgICAgICAgaWYgKHJvcGVCdWlsZGVyLmxlbmd0
aCgpIDwgb2xkTGVuZ3RoKSAvLyBUcnVlIGZvciBvdmVyZmxvdwogICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CkBAIC0zMDAsMTEgKzI5MCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpZiAodjEuaXNOdW1iZXIoKSAmJiB2Mi5pc051bWJlcigp
KQogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJl
cigpKTsKICAgICAgICAgCi0gICAgICAgIGlmICh2MS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gdjIuaXNTdHJpbmcoKQotICAgICAgICAgICAgICAgID8ganNTdHJpbmcoY2FsbEZy
YW1lLCBhc1N0cmluZyh2MSksIGFzU3RyaW5nKHYyKSkKLSAgICAgICAgICAgICAgICA6IGpzU3Ry
aW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1ByaW1pdGl2ZVN0cmluZyhjYWxsRnJh
bWUpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodjEuaXNTdHJpbmcoKSAmJiAhdjIuaXNPYmpl
Y3QoKSkKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYx
KSwgdjIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgLy8gQWxsIG90aGVyIGNhc2Vz
IGFyZSBwcmV0dHkgdW5jb21tb24KICAgICAgICAgcmV0dXJuIGpzQWRkU2xvd0Nhc2UoY2FsbEZy
YW1lLCB2MSwgdjIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cHV0KEpTQ2VsbCog
Y2VsbAogCiB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBhc1JlZ0V4cENvbnN0
cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRJbnB1dCh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAg
YXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQpAQCAtMzIzLDEzICszMjMsMTMgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3Rh
dGUqIGV4ZQogICAgICAgICByZXR1cm4gYXNPYmplY3QoYXJnMCk7CiAgICAgfQogCi0gICAgVVN0
cmluZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZzAuaXNVbmRlZmluZWQoKSA/
IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZ0V4cEZs
YWdzIGZsYWdzID0gTm9GbGFnczsKICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewotICAg
ICAgICBmbGFncyA9IHJlZ0V4cEZsYWdzKGFyZzEudG9TdHJpbmcoZXhlYykpOworICAgICAgICBm
bGFncyA9IHJlZ0V4cEZsYWdzKGFyZzEudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBKU1ZhbHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVj
U3RhdGUqIGV4CiBib29sIFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKLSAgICBVU3RyaW5nIGlucHV0ID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBpbnB1dCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGlmICghcmVnRXhw
KCktPmdsb2JhbCgpKSB7CiAgICAgICAgIGludCBwb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEzICsxMTAsMTMgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbm5vdCBzdXBwbHkgZmxhZ3Mgd2hlbiBj
b25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFub3RoZXIuIikpOwogICAgICAgICByZWdFeHAg
PSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
VVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDog
YXJnMC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxh
Z3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQpAQCAtMTUzLDcgKzE1Myw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcG9zdGZpeFtpbmRleCsr
XSA9ICdpJzsKICAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbihleGVjKSkKICAgICAgICAgcG9zdGZpeFtpbmRleF0g
PSAnbSc7Ci0gICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzb3Vy
Y2UgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwg
dXNlICIvKD86KS8iIHRvIGF2b2lkIGNvbGxpZGluZyB3aXRoIGNvbW1lbnQgc3ludGF4CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICIvIiwg
c291cmNlLmxlbmd0aCgpID8gc291cmNlIDogVVN0cmluZygiKD86KSIpLCBwb3N0Zml4KSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5
NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShT
dHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVj
dHVyZSgpKSk7CiAgICAgCi0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDAp
LmlzU3RyaW5nKCkKLSAgICAgICAgPyBhc1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkKLSAgICAg
ICAgOiBqc1N0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBzdHJpbmcpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTExMSw3ICsxMDgs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiB7CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNFbXB0eVN0cmluZyhleGVjKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogfQogCiBD
YWxsVHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
IGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUs
NyArNDQ1LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
cmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKLSAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CisgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+
dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwpA
QCAtNTAyLDEwICs1MDIsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJl
cGxhCiAKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVj
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkp
OworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNh
Y2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKQEAgLTU0NywxMCArNTQ0LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZXBsYQogCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKExJS0VMWShyZXN1bHQuaXNTdHJpbmcoKSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoYXNTdHJpbmcocmVzdWx0KS0+dmFsdWUo
ZXhlYykpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhl
YykpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3VsdC50b1N0cmlu
ZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCkBAIC01OTQsNyArNTg4LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNW
YWx1ZSByZXBsYQogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGNvbXBsZXRl
TWF0Y2hTdGFydCkpOwogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKLSAg
ICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVl
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFj
ZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC02MzMsNyArNjI3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBy
ZXBsYQogc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdTdHJp
bmdTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyoganNTdHJpbmcsIEpTVmFsdWUgc2Vh
cmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewogICAgIGNvbnN0IFVTdHJpbmcmIHN0
cmluZyA9IGpzU3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBVU3RyaW5nIHNlYXJjaFN0cmluZyA9
IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0g
c2VhcmNoVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIApAQCAtNjUzLDcgKzY0Nyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbGEKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCi0gICAgVVN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVl
LnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBA
IC02NjUsMTIgKzY1OSw5IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVw
bGEKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgdGhpc1Zh
bHVlID0ganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICB9Ci0g
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHRoaXNWYWx1ZSk7CisgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDEpOwogCkBAIC02OTgsNyArNjg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RD
b2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5s
ZW5ndGgoKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEw
LmlzVUludDMyKCkpIHsKQEAgLTcxOCw3ICs3MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVj
a09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
LSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBs
ZW4gPSBzLmxlbmd0aCgpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBpZiAoYTAuaXNVSW50MzIoKSkgewpAQCAtNzM5LDEyICs3MzAsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1N0
cmluZygpICYmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2ID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
di5pc1N0cmluZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNW
YWx1ZSksIGFzU3RyaW5nKHYpKQotICAgICAgICAgICAgOiBqc1N0cmluZyhleGVjLCBhc1N0cmlu
Zyh0aGlzVmFsdWUpLCBqc1N0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCB2LnRvU3RyaW5nKGV4
ZWMpKSkpOwotICAgIH0KKyAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAxKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSkpOworCiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBD
aGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhleGVj
LCB0aGlzVmFsdWUpKTsKQEAgLTc1NSwxMiArNzQzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENo
ZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBsZW4g
PSBzLmxlbmd0aCgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBVU3RyaW5nIHUyID0gYTAudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBpbnQgcG9zOwogICAgIGlmIChhMS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBw
b3MgPSAwOwpAQCAtNzg2LDEzICs3NzQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmpl
Y3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVu
Z3RoKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1
ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCi0gICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgZG91YmxlIGRwb3MgPSBhMS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBp
ZiAoZHBvcyA8IDApCiAgICAgICAgIGRwb3MgPSAwOwpAQCAtODEwLDcgKzc5OCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAK
ICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC04MjUsNyArODEzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgcmVw
bGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhw
KS4KICAgICAgICAgICogIFBlciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAgaXMgdW5kZWZpbmVkIHN1
YnN0aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJl
Z0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJp
bmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAgICByZWcgPSBSZWdF
eHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5n
KCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9GbGFncyk7CiAgICAgICAg
IGlmICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZy0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICB9
CkBAIC04NjIsNyArODUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2li
bGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKQEAgLTg3Nyw3ICs4NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4
cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAu
NC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAg
ICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKSwgTm9G
bGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQoKSkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVn
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KQEAgLTg5Myw3ICs4ODEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKQEAgLTkyNSw3ICs5MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAKICAgICAvLyAyLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9T
dHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8g
Ni4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCi0gICAgVVN0cmluZyBp
bnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGlucHV0ID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIC8vIDMuIExldCBBIGJl
IGEgbmV3IGFycmF5IGNyZWF0ZWQgYXMgaWYgYnkgdGhlIGV4cHJlc3Npb24gbmV3IEFycmF5KCkK
ICAgICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0
b3Igd2l0aCB0aGF0IG5hbWUuCkBAIC0xMDI3LDcgKzEwMTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBVU3RyaW5nIHNlcGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHNlcGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgICAgICAvLyA5LiBJZiBsaW0gPT0gMCwg
cmV0dXJuIEEuCiAgICAgICAgIGlmICghbGltaXQpCkBAIC0xMTE0LDcgKzExMDIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIC8vIENoZWNrT2Jq
ZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBsZW4gPSB1U3RyaW5nLmxlbmd0
aCgpOwpAQCAtMTE0NCwyNCArMTEzMiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaW50IGxlbjsKLSAgICBKU1N0cmluZyoganNTdHJp
bmcgPSAwOwotICAgIFVTdHJpbmcgdVN0cmluZzsKLSAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5n
KCkpIHsKLSAgICAgICAganNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHRoaXNWYWx1
ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKLSAgICB9IGVs
c2UgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIC8vIENoZWNr
T2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAv
LyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBsZW4gPSB1U3Ry
aW5nLmxlbmd0aCgpOwotICAgIH0KKworICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEw
ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEp
OworICAgIGludCBsZW4gPSBqc1N0cmluZy0+bGVuZ3RoKCk7CiAKICAgICBkb3VibGUgc3RhcnQg
PSBhMC50b051bWJlcihleGVjKTsKICAgICBkb3VibGUgZW5kOwpAQCAtMTE4NSw5ICsxMTY1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIH0KICAgICB1
bnNpZ25lZCBzdWJzdHJpbmdTdGFydCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCk7CiAg
ICAgdW5zaWduZWQgc3Vic3RyaW5nTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkg
LSBzdWJzdHJpbmdTdGFydDsKLSAgICBpZiAoanNTdHJpbmcpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBz
dWJzdHJpbmdMZW5ndGgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5n
KGV4ZWMsIHVTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5nLCBzdWJzdHJp
bmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTE5
NSw3ICsxMTczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0
aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNTdHJpbmcqIHNWYWwg
PSB0aGlzVmFsdWUuaXNTdHJpbmcoKSA/IGFzU3RyaW5nKHRoaXNWYWx1ZSkgOiBqc1N0cmluZyhl
eGVjLCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIEpTU3RyaW5nKiBzVmFsID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1
ZShleGVjKTsKIAogICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7CkBAIC0xMjE0LDcgKzExOTIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1
ZS5pc1N0cmluZygpID8gYXNTdHJpbmcodGhpc1ZhbHVlKSA6IGpzU3RyaW5nKGV4ZWMsIHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwog
CiAgICAgaW50IHNTaXplID0gcy5sZW5ndGgoKTsKQEAgLTEyNTcsMTAgKzEyMzUsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihsb2NhbGVDb21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMp
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobG9jYWxlQ29tcGFyZShz
LCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEy
NjgsNyArMTI0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQogCkBAIC0x
Mjc3LDcgKzEyNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYg
KHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFr
ZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9CiAK
QEAgLTEyODYsNyArMTI2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNp
YmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsK
IH0KIApAQCAtMTI5NSw3ICsxMjczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RD
b2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKIH0K
IApAQCAtMTMwNCw3ICsxMjgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2Vy
Y2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQog
CkBAIC0xMzEzLDcgKzEyOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJj
aWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQogCkBA
IC0xMzIyLDcgKzEzMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
aWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJs
ZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsK
IH0KIApAQCAtMTMzMSw3ICsxMzA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RD
b2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7
CiB9CiAKQEAgLTEzNDAsNyArMTMxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0
Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+Iikp
OwogfQogCkBAIC0xMzQ5LDkgKzEzMjcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVj
dENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+
IiwgcywgIjwvZm9udD4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTEzNTksNyArMTMzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBp
ZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxl
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKIAogICAgIHVpbnQzMl90IHNtYWxsSW50ZWdlcjsKQEAgLTEzOTYsNyArMTM3NCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgaW1wbCkpOwogICAgIH0K
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4i
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8Zm9udCBzaXplPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXCI+
IiwgcywgIjwvZm9udD4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0MDQsOSArMTM4Miw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIi
LCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIsIHMsICI8L2E+IikpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgIlwiPiIsIHMsICI8L2E+IikpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRl
KiBleGVjKQpAQCAtMTQxNCw5ICsxMzkyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmpl
Y3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwotICAgIFVTdHJpbmcgbGlua1RleHQgPSBhMC50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGxpbmtUZXh0ID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogCiAgICAgdW5zaWduZWQgbGlua1RleHRTaXplID0gbGlua1RleHQubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgc3RyaW5nU2l6ZSA9IHMubGVuZ3RoKCk7CkBAIC0xNDU5LDcgKzE0MzcsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiB7CiAgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzdHIgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlZnQgPSAwOwogICAgIGlmICh0cmlt
S2luZCAmIFRyaW1MZWZ0KSB7CiAgICAgICAgIHdoaWxlIChsZWZ0IDwgc3RyLmxlbmd0aCgpICYm
IGlzVHJpbVdoaXRlc3BhY2Uoc3RyW2xlZnRdKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJl
biAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91
bGQgcmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSlNVdGlscy5jcHA6CisgICAgICAg
IChLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwpOgorCiAyMDEyLTAxLTE5ICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGEgbmV3IGFs
bG9jYXRvciBmb3IgYmFja2luZyBzdG9yZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9K
U1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5j
cHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIENGVHlwZVJlZiBLSlNWYWx1ZVRv
Q0ZUeXBlSW50ZXJuYWwoSlNWYWwKIAogICAgICAgICBpZiAoaW5WYWx1ZS5pc1N0cmluZygpKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdVN0cmluZyA9IGluVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1U3RyaW5nID0gaW5WYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
VVN0cmluZ1RvQ0ZTdHJpbmcodVN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTY1NikKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBAQAor
MjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAg
IEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9m
IGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVyIGNhbGxpbmcgdG9TdHJp
bmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmciIChKU1N0cmluZyopIHRv
ICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRvU3RyaW5nKCkgbm8gbG9u
Z2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21W
YWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmNsZWFyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NsaXBib2FyZDo6Z2V0RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlND
dXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NRm9ybURhdGE6OmFwcGVuZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERl
bGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZl
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEZXZpY2VNb3Rpb25FdmVudDo6aW5p
dERldmljZU1vdGlvbkV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RldmljZU9yaWVu
dGF0aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEZXZpY2VPcmllbnRh
dGlvbkV2ZW50Ojppbml0RGV2aWNlT3JpZW50YXRpb25FdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6
Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1M
QWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSFRNTEFsbENv
bGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxDb2xsZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxl
Y3Rpb246Om5hbWVkSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRXcml0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnNldEhyZWYpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
UHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNl
dFBhdGhuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6YXNz
aWduKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVJbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNh
Y3Rpb25TeW5jOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdv
cmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
dG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRl
bnNpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViU29j
a2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViU29ja2V0OjpjbG9zZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6
aW1wb3J0U2NyaXB0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXb3Jr
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hT
TFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29y
OjpzZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpnZXRQ
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJh
bWV0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudExp
c3RlbmVySGFuZGxlckJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjp0b1N0cmluZyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUV2
ZW50TGlzdGVuZXJDYWxsKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICogYnJpZGdlL2MvY191dGls
aXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50
KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pz
Yy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0Mu
Y3BwOgorICAgICAgICAoSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKToKKyAg
ICAgICAgKEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxk
OjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OnNldFZh
bHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlND
LmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKToKKyAgICAgICAgKiB0
ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW50
ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKwogMjAxMi0wMS0xOCAgRGF2aWQg
TGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWxsb3cgZGVsYXllZCBEQyBh
bGxvY2F0aW9uIGluIEhXbmREQy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJv
bVZhbHVlCiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlKHZhbHVlLnRvSW50MzIoZXhlYykpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJp
bmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBkYXRlcy4KICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3
IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXREZWxlZ2F0ZSgKIAogSlNWYWx1ZSBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0
ZQogICAgIH0KIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewotICAgICAg
ICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgY2xpcGJvYXJkLT5jbGVhckRhdGEodXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAg
SlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVjU3RhdGUqIAogICAgIENsaXBib2FyZCog
Y2xpcGJvYXJkID0gaW1wbCgpOwogCiAgICAgYm9vbCBzdWNjZXNzOwotICAgIFN0cmluZyByZXN1
bHQgPSBjbGlwYm9hcmQtPmdldERhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKSwgc3VjY2Vzcyk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2Fy
ZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKSwgc3VjY2Vzcyk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVj
KTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJpbmcoZXhl
YykpOworICAgICAgICAgICAgcmVzdWx0ID0gdXN0cmluZ1RvU3RyaW5nKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KIAogICAgIERvY3VtZW50Ojp1cGRhdGVTdHls
ZUZvckFsbERvY3VtZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTQgKzEyMCwx
NCBAQCBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0CiB7CiAgICAgaWYg
KHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIHVzdHJpbmdU
b1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiBTdHJpbmcg
dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIEpTVmFsdWUganNEYXRlT3JOdWxsKEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlIHZhbHVlKQpAQCAtMTUxLDEwICsxNTEsMTAgQEAgdm9pZCByZXBvcnRF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRp
b25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVVN0cmluZyBl
cnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpT
T2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7CiAgICAg
aW50IGxpbmVOdW1iZXIgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJsaW5lIikpLnRvSW50MzIoZXhlYyk7Ci0gICAgVVN0cmluZyBleGNlcHRpb25Tb3VyY2VV
UkwgPSBleGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VV
UkwiKSkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkwgPSBl
eGNlcHRpb25PYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VVUkwiKSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CiAKICAgICBpZiAoRXhjZXB0aW9uQmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFz
ZShleGNlcHRpb24pKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3Jt
RGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwxNSArNjAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RPTUZvcm1E
YQogSlNWYWx1ZSBKU0RPTUZvcm1EYXRhOjphcHBlbmQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewotICAgICAgICBTdHJpbmcgbmFtZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5h
cmd1bWVudCgxKTsKICAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykp
IHsKICAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZTsKICAgICAgICAgICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMyAmJiAhZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHRvQmxvYih2YWx1ZSksIGZp
bGVuYW1lKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbXBsKCktPmFwcGVuZChuYW1l
LCB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgIGlt
cGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBi
b29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlCiAKIGJvb2wgSlNET01TdHJp
bmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewotICAgIFN0cmlu
ZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7Cisg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCB2b2lkIEpTRE9NV2luZG93
OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQogI2VuZGlmCiAKLSAgICBVU3RyaW5nIGxv
Y2F0aW9uU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBsb2NhdGlv
blN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTEyLDcgKzUxMiw3IEBA
IEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGUKICAgICBTdHJpbmcgdXJs
U3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+
YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRv
bWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBBdG9taWNT
dHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/
ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNT
dHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDIpKTsKQEAgLTY3OSw3ICs2NzksNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojph
ZGRFdmVudExpc3RlbmVyKEV4CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1
c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBj
dXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIApAQCAtNjkzLDcgKzY5Myw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6
OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3Rl
bmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFs
c2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVh
bihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21p
Y1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBj
dXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZp
Y2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBA
QCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFsKEV4CiAKIEpTVmFsdWUgSlNE
ZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9IHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKICAg
ICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50
YXRpb25FdmVudDo6YWJzb2x1CiAKIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojpp
bml0RGV2aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3Qg
U3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBib29sIGJ1YmJs
ZXMgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgYm9vbCBjYW5jZWxh
YmxlID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwogICAgIC8vIElmIGFscGhh
LCBiZXRhIG9yIGdhbW1hIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBw
cm92aWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEpTRGlj
dGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252
ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkK
IHsKLSAgICByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOwor
ICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogfQogCiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU2NyaXB0VmFsdWUmIHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExv
Y2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7Cisg
ICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogCiAgICAgRnJhbWUqIGxleGljYWxGcmFtZSA9IGFzSlNET01XaW5kb3coZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9u
KGV4ZWMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiBldmVudC0+c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSkKLSAgICAgICAg
ICAgICAgICBldmVudC0+c3RvcmVSZXN1bHQodXN0cmluZ1RvU3RyaW5nKHJldHZhbC50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdCh1c3RyaW5nVG9T
dHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAg
aWYgKG1faXNBdHRyaWJ1dGUpIHsKICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2Uo
KSkKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDcgKzcyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0IGZv
ciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAgICBib29sIG9rOwotICAgICAgICBV
U3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJbnQzMihz
dHJpbmcsIG9rKTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rp
b24tPml0ZW0oaW5kZXgpKSk7CkBAIC04Myw4ICs4Myw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlz
IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50CiAgICAgYm9vbCBvazsKLSAgICBVU3RyaW5n
IHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYyksIG9rKTsKKyAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IElkZW50aWZpZXI6
OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
b2spOwogICAgIGlmIChvaykgewogICAgICAgICBpZiAoTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24t
Pm5hbWVkSXRlbVdpdGhJbmRleCh1c3RyaW5nVG9BdG9taWNTdHJpbmcoc3RyaW5nKSwgaW5kZXgp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVj
dGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKQEAgLTExMywxNSArMTEzLDE1IEBAIEpTVmFs
dWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRlcigKIEpTVmFsdWUgSlNIVE1MQWxsQ29s
bGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYm9vbCBvazsKLSAgICB1aW50
MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLCBvayk7CisgICAgdWludDMyX3QgaW5kZXggPSBJZGVudGlmaWVyOjp0b1VJbnQz
MihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIG9rKTsKICAg
ICBpZiAob2spCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCktPml0ZW0oaW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJ
ZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAg
cmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSBK
U0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVj
LCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50
OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIGNv
bnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
OworICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0
ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoY29udGV4dElkID09ICJleHBl
cmltZW50YWwtd2ViZ2wiIHx8IGNvbnRleHRJZCA9PSAid2Via2l0LTNkIikgewpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTUg
QEAgSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZQogSlNWYWx1ZSBKU0hU
TUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIG9rOwotICAg
IHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyksIG9rKTsKKyAgICB1aW50MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRv
VUludDMyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgb2sp
OwogICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGltcGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRo
aXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsK
KyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiBKU1Zh
bHVlIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
cmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4
ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9u
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTQg
KzEzNiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVjU3RhCiAKICAg
ICBzaXplX3Qgc2l6ZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKIAotICAgIFVTdHJpbmcgZmly
c3RTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IGZpcnN0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50ZWRTdHJpbmcgPSB1c3RyaW5nVG9TdHJp
bmcoZmlyc3RTdHJpbmcpOwogICAgIGlmIChzaXplICE9IDEpIHsKICAgICAgICAgaWYgKCFzaXpl
KQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNsZWFyKCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBleGVjLT5hcmd1bWVudChpKS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBl
eGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAg
ICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdtZW50ZWRTdHJpbmcodXN0cmluZ1RvU3Ry
aW5nKHN1YnNlcXVlbnRTdHJpbmcpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsNyBAQCB2b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRGlyCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnB1dC0+c2V0U2VsZWN0aW9uRGlyZWN0aW9uKHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgIGlucHV0LT5zZXRTZWxl
Y3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9u
UmFuZ2UoRXhlY1N0YXRlKiBleGVjKQpAQCAtOTcsNyArOTcsNyBAQCBKU1ZhbHVlIEpTSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uCiAKICAgICBpbnQgc3RhcnQgPSBleGVjLT5hcmd1bWVu
dCgwKS50b0ludDMyKGV4ZWMpOwogICAgIGludCBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMpOwotICAgIFN0cmluZyBkaXJlY3Rpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBkaXJlY3Rpb24gPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKIAogICAgIGlucHV0LT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24p
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEw
NSwxNCBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29uCiAgICAgICAg
IGlmICghdHlwZS5pc1N0cmluZygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
U3RyaW5nIHR5cGVTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcodHlwZS50b1N0cmluZyhleGVjKSk7
CisgICAgICAgIFN0cmluZyB0eXBlU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHR5cGUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgaWYgKHR5cGVTdHJpbmcgPT0gInNlcGFy
YXRvciIpIHsKICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVtKFNl
cGFyYXRvclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0ludDMyKGV4
ZWMpKTsKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSogbWVudUl0ZW0gPSBuZXcgQ29udGV4
dE1lbnVJdGVtKCh0eXBlU3RyaW5nID09ICJjaGVja2JveCIgPyBDaGVja2FibGVBY3Rpb25UeXBl
IDogQWN0aW9uVHlwZSksIHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhl
eGVjKSkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSA9IG5ldyBDb250
ZXh0TWVudUl0ZW0oKHR5cGVTdHJpbmcgPT0gImNoZWNrYm94IiA/IENoZWNrYWJsZUFjdGlvblR5
cGUgOiBBY3Rpb25UeXBlKSwgdHlwZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgaWYgKCFlbmFibGVkLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgICAgICAgICAgbWVudUl0ZW0tPnNldEVuYWJsZWQoZW5hYmxlZC50b0Jv
b2xlYW4oZXhlYykpOwogICAgICAgICAgICAgaWYgKCFjaGVja2VkLmlzVW5kZWZpbmVkKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNj
cmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNWYWx1ZSBKU0ph
dmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS0+ZXZhbHVhdGUoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6ZGVmaW5lR2V0dGVyKEpT
T2JqZWN0KiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhyZWYgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIGhyZWYgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgp
LT5zZXRIcmVmKHVzdHJpbmdUb1N0cmluZyhocmVmKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBm
aXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBKU0xvY2F0aW9u
OjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpTTG9jYXRpb246OnNldFByb3RvY29s
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHByb3RvY29s
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwcm90b2NvbCA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE5Nyw3ICsx
OTcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogCiAKIHZvaWQg
SlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBob3N0
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0SG9zdCh1c3RyaW5n
VG9TdHJpbmcoaG9zdCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhl
YykpOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3Rh
dGUqIGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBob3N0bmFtZSA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgaG9zdG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47
CiAgICAgaW1wbCgpLT5zZXRIb3N0bmFtZSh1c3RyaW5nVG9TdHJpbmcoaG9zdG5hbWUpLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIxMyw3ICsyMTMs
NyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3RuYW1lKEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNM
b2NhdGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
VVN0cmluZyBwb3J0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwb3J0ID0g
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0UG9ydCh1c3RyaW5nVG9T
dHJpbmcocG9ydCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykp
OwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UG9ydChFeGVjU3RhdGUq
IGV4ZWMKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRobmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLT5zZXRQYXRobmFtZSh1c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVE
T01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTIyOSw3ICsyMjksNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogCiAKIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBV
U3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBwYXRo
bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldFNlYXJjaCh1
c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9N
V2luZG93KGV4ZWMpKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFNl
YXJjaChFeGVjU3RhdGUqIGV4CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBoYXNoID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBoYXNoID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwoKS0+c2V0SGFzaCh1c3RyaW5nVG9TdHJpbmcoaGFzaCksIGFjdGl2ZURPTVdpbmRv
dyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQg
SlNMb2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4ZWMKIAogSlNWYWx1ZSBKU0xvY2F0aW9u
OjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIHVybFN0cmluZyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgdXJsU3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
aW1wbCgpLT5yZXBsYWNlKHVzdHJpbmdUb1N0cmluZyh1cmxTdHJpbmcpLCBhY3RpdmVET01XaW5k
b3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKQEAgLTI2MCw3ICsyNjAsNyBAQCBKU1Zh
bHVlIEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUqIGV4CiAKIEpTVmFsdWUgSlNMb2NhdGlv
bjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIHVybFN0cmluZyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgdXJsU3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
aW1wbCgpLT5hc3NpZ24odXN0cmluZ1RvU3RyaW5nKHVybFN0cmluZyksIGFjdGl2ZURPTVdpbmRv
dyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEwMiwxMSBAQCBKU1ZhbHVlIEpTTWVzc2Fn
ZUV2ZW50Ojpwb3J0cyhFeGVjU3RhdGUqCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5p
dE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgY29uc3QgVVN0cmluZyYgdHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcmIHR5cGVBcmcgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgYm9vbCBjYW5CdWJibGVBcmcg
PSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgYm9vbCBjYW5jZWxhYmxl
QXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJp
bmcmIG9yaWdpbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDQpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGNv
bnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJpbmco
ZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhlYy0+YXJndW1lbnQoNCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVu
dElkQXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gdG9ET01XaW5kb3coZXhlYy0+YXJndW1lbnQoNikp
OwogICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBtZXNzYWdlUG9ydHM7CiAgICAgaWYgKCFl
eGVjLT5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1
ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3Rh
dGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODEsNyArODEsNyBAQCBKU1ZhbHVlIEpTU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVu
ZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGFuZCBhcHBlbmQgaXQKLSAgICAg
ICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmluZ1RvU3Ry
aW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0
aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1
ZSBKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNxbAogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3Rh
dGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtODAsNyArODAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJh
bnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsCiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVu
ZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGFuZCBhcHBlbmQgaXQKLSAgICAg
ICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmlu
ZyhleGVjKSkpOworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmluZ1RvU3Ry
aW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTU2hhcmVkV29yCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzY3JpcHRVUkwgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgVVN0cmluZyBu
YW1lOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKQotICAgICAgICBuYW1lID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIG5hbWUgPSBleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBib29sIEpT
U3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgaWYgKHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5
TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBTdHJpbmcgc3RyaW5nVmFs
dWUgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBz
dHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlCiAgICAgICAgIHJldHVybiB0aHJvd1N5bnRheEVy
cm9yKGV4ZWMpOwogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsKLSAgICBjb25zdCBTdHJpbmcm
IG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykp
OworICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xFeHRlbnNp
b24qIGV4dGVuc2lvbiA9IGNvbnRleHQtPmdldEV4dGVuc2lvbihuYW1lKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHJldmlz
aW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogCi0gICAgU3RyaW5nIHVybFN0cmluZyA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3Ry
aW5nIHVybFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAi
d3JvbmcgVVJMIikpOwogICAgIFJlZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCA9IFdlYlNvY2tl
dDo6Y3JlYXRlKGNvbnRleHQpOwpAQCAtNzMsMTQgKzczLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNXZWJTb2NrZXQKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHByb3Rv
Y29sczsKICAgICAgICAgICAgIEpTQXJyYXkqIHByb3RvY29sc0FycmF5ID0gYXNBcnJheShwcm90
b2NvbHNWYWx1ZSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9j
b2xzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9j
b2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJp
bmcocHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgICAg
ICAgICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBwcm90b2NvbHMsIGVjKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmlu
Zyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBTdHJpbmcgcHJv
dG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcocHJvdG9jb2xzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgICAg
ICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBwcm90b2NvbCwgZWMpOwpAQCAtMTAzLDcg
KzEwMyw3IEBAIEpTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQoRXhlY1N0YXRlKiBleGUKICAgICBl
bHNlIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCiAgICAgICAgIHJlc3Vs
dCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSksIGVjKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmcobWVzc2FnZS50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIFN0cmluZyBzdHJpbmdNZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5n
KG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZChzdHJpbmdNZXNzYWdlLCBlYyk7CkBAIC0xMzUsNyAr
MTM1LDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6Y2xvc2UoRXhlY1N0YXRlKiBleAogICAgICAg
ICAgICAgeCA9IGNsYW1wVG8oeCwgbWluVmFsdWUsIG1heFZhbHVlKTsKICAgICAgICAgY29kZSA9
IGNsYW1wVG9JbnRlZ2VyKHgpOwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0g
ICAgICAgICAgICByZWFzb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9T
dHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVhc29uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgU1lOVEFYX0VSUik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw3ICsxMDksNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFCiAK
ICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGVjLT5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAgICAgICB1cmxzLmFwcGVuZCh1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgdXJs
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dv
cmtlckNvbgogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKSk7CiAKLSAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDgg
QEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZQogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CiAKLSAgICBj
b25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxl
dGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKSk7
Ci0gICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYgdXJsID0gaW1wbCgpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBTdHJpbmcgbWV0aG9kID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDMpIHsKQEAgLTEyOSw3ICsxMjksNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cygmSlNB
cnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0FycmF5QnVm
ZmVyKHZhbCksIGVjKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHVz
dHJpbmdUb1N0cmluZyh2YWwudG9TdHJpbmcoZXhlYykpLCBlYyk7CisgICAgICAgICAgICBpbXBs
KCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
LCBlYyk7CiAgICAgfQogCiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDkgKzg5LDkgQEAgSlNWYWx1
ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeAogewogICAgIGlmIChleGVjLT5hcmd1
bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNl
cHRpb24/Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5n
IHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgIFN0cmluZyB2YWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGltcGwoKS0+c2V0UGFy
YW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CkBAIC0xMDAsOCArMTAwLDggQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6
OmdldFBhcmFtZXRlcihFeAogewogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFt
ZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgx
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIFN0cmluZyB2YWx1ZSA9IGltcGwo
KS0+Z2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKICAgICByZXR1cm4ganNT
dHJpbmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7CiB9CkBAIC0xMTAsOCArMTEwLDggQEAgSlNW
YWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcgogewogICAgIGlmIChleGVjLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcg
bmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAg
IGltcGwoKS0+cmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCBQYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0CiAg
ICAgaWYgKGdldENhbGxEYXRhKHYsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAg
ICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2YWwoKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBVU3RyaW5nIHN0cmluZyA9IHYudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjaGVkdWxlZEFjdGlvbih1c3RyaW5n
VG9TdHJpbmcoc3RyaW5nKSwgaXNvbGF0ZWRXb3JsZCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEw
NTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDggQEAgU3RyaW5nIGV2ZW50TGlzdGVu
ZXJIYW5kbGVyQm9keShEb2N1bWVudAogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBq
c0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAg
ICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKGpzRnVuY3Rpb24t
PnRvU3RyaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUoanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgp
LCBkb2N1bWVudCkpKTsKKyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0
ZUZyb21Ob2RlKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKSwgZG9jdW1lbnQpOworICAgIHJl
dHVybiB1c3RyaW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52
YWx1ZShzY3JpcHRTdGF0ZSkpOwogfQogCiBib29sIGV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRp
b24oRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBTdHJp
bmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsNyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoU2NyaXB0U3RhdGUqCiAKIFN0
cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25z
dAogewotICAgIFN0cmluZyByZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcobV92YWx1ZS5nZXQoKS50
b1N0cmluZyhzY3JpcHRTdGF0ZSkpOworICAgIFN0cmluZyByZXN1bHQgPSB1c3RyaW5nVG9TdHJp
bmcobV92YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRl
KSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24g
YXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0LgogICAgIGlmIChzY3Jp
cHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHNjcmlwdFN0YXRlLT5jbGVhckV4Y2Vw
dGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODgs
NyArMTg4LDcgQEAgRU5ECiAgICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEp
OwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExp
c3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgJHdyYXBw
ZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQdHJIYW5kbGluZywg
ZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsLT4ke2Z1bmN0aW9u
TmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIEVORAogICAg
IHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbDsKQEAgLTI5MTIsNyArMjkxMiw3IEBA
IHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBpZiAoJHR5cGUgZXEgIkRPTVN0cmluZyIpIHsKICAg
ICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCAkdmFsdWUpIiBp
ZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051bGxTdHJp
bmcifSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OwogICAg
ICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywg
JHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRl
ZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKLSAgICAgICAgcmV0dXJuICJ1c3RyaW5nVG9TdHJp
bmcoJHZhbHVlLmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6ICR2YWx1ZS50b1N0cmluZyhleGVjKSki
OworICAgICAgICByZXR1cm4gInVzdHJpbmdUb1N0cmluZygkdmFsdWUuaXNFbXB0eSgpID8gVVN0
cmluZygpIDogJHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkiOwogICAgIH0KIAog
ICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewpAQCAtMzQ5Miw3ICszNDkyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdAogICAgIGlmICghZXhlY3V0aW9u
Q29udGV4dCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBp
cyB1bmF2YWlsYWJsZSIpKTsKIAotICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIEF0
b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0YmluZGluZ3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0YmluZGluZ3MuY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvdGVzdGJpbmRpbmdzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY29tcC5jb21wbFR5cGUo
KSA9PSBUaHJvdykgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZSBleFZhbCA9IGNvbXAudmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqbXNnID0gZXhWYWwudG9TdHJpbmcoZXhl
YykuYXNjaWkoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBs
aW5lbm8gPSAtMTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV4VmFsLnR5cGUoKSA9PSBPYmpl
Y3RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBsaW5lVmFsID0gT2JqZWN0
OjpkeW5hbWljQ2FzdChleFZhbCkuZ2V0KGV4ZWMsSWRlbnRpZmllcigibGluZSIpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0cXRiaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RxdGJpbmRpbmdzLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RxdGJpbmRpbmdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAgICAgICAgICAg
ICAgICAgcURlYnVnKCkgPDwgImV4Y2VwdGlvbiB0aHJvd24iOwogICAgICAgICAgICAgICAgIEpT
VmFsdWUqIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGNoYXIqIG1zZyA9
IGV4VmFsLT50b1N0cmluZyhleGVjKS5hc2NpaSgpOworICAgICAgICAgICAgICAgIGNoYXIqIG1z
ZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKTsKICAgICAgICAg
ICAgICAgICBpbnQgbGluZW5vID0gLTE7CiAgICAgICAgICAgICAgICAgaWYgKGV4VmFsLT50eXBl
KCkgPT0gT2JqZWN0VHlwZSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlKiBsaW5lVmFs
ID0gZXhWYWwtPmdldE9iamVjdCgpLT5nZXQoZXhlYywgSWRlbnRpZmllcigibGluZSIpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSog
CiAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJp
bmcoKSkgewotICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSB1c3RyaW5nLnV0ZjgoKTsKICAgICAgICAg
TlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4Kiljc3RyaW5nLmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGNzdHJpbmcubGVuZ3RoKCkpIH07CiAgICAgICAgIE5QTl9Jbml0aWFs
aXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwgJnN0cmluZyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ4OCw3ICs0ODgsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9K
T2JqCiAgICAgICAgICAgICByZXN1bHQgPSBlbnYtPk5ld09iamVjdCAoSlNPYmplY3RDbGFzcywg
Y29uc3RydWN0b3JJRCwgKGpkb3VibGUpdmFsdWUudG9OdW1iZXIoZXhlYykpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFVTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHJpbmdW
YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdTdHJpbmcgKChj
b25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwgc3RyaW5nVmFsdWUubGVuZ3Ro
KCkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxp
dHlQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgam9i
amVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAgICAgICAgICAgICAgICAgIGVudi0+
TmV3U3RyaW5nVVRGKCIiKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpz
QXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdW
YWx1ZSA9IGl0ZW0udG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcg
c3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAg
ICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoamFycmF5LCBpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBq
Y2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwgc3RyaW5nVmFsdWUubGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZl
cnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpz
QXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVl
ID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1Zh
bHVlID0gaXRlbS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAg
amNoYXIgdmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZS5sZW5ndGgo
KSA+IDApCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKChjb25zdCBqY2hhciopc3RyaW5n
VmFsdWUuY2hhcmFjdGVycygpKVswXTsKQEAgLTI0OSw3ICsyNDksNyBAQCBqdmFsdWUgY29udmVy
dFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICAvLyBjb252ZXJ0aW5nIGZy
b20gYSBudWxsLgogICAgICAgICAgICAgaWYgKCFyZXN1bHQubCAmJiAhc3RyY21wKGphdmFDbGFz
c05hbWUsICJqYXZhLmxhbmcuU3RyaW5nIikpIHsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdW
YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAg
ICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgICAgICAgICAgICAgam9i
amVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBq
Y2hhciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBqdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRj
aFZhbHVlRnJvbUluc3RhCiAgICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwog
ICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVI
YW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJl
c3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlmIChleGNl
cHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVFcnJvcihleGVjLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKSkpOwor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEpTVmFsdWUgSmF2
YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSBnZXR0aW5n
ICVzID0gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCksIGpzcmVzdWx0
LnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBMT0coTGl2ZUNvbm5lY3QsICJK
YXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmcobmFt
ZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHJldHVybiBqc3Jlc3VsdDsKIH0KQEAgLTE3
Miw3ICsxNzIsNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAg
ICAgICAgICAgICAgICAgYXJnc1sxXSA9IGphdmFWYWx1ZTsKICAgICAgICAgICAgICAgICBkaXNw
YXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3Rh
bmNlLCBmYWxzZSwgSmF2YVR5cGVWb2lkLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9u
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBl
eGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5z
dGFuY2UoRXhlY1MKICAgICBjb25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgSmF2YUluc3RhbmNlKj4oaSk7CiAgICAganZhbHVlIGphdmFWYWx1ZSA9IGNvbnZl
cnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGktPnJvb3RPYmplY3QoKSwgYVZhbHVlLCBtX3R5cGUsIHR5
cGVDbGFzc05hbWUoKSk7CiAKLSAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnNldFZh
bHVlVG9JbnN0YW5jZSBzZXR0aW5nIHZhbHVlICVzIHRvICVzIiwgVVN0cmluZyhuYW1lKCkuaW1w
bCgpKS51dGY4KCkuZGF0YSgpLCBhVmFsdWUudG9TdHJpbmcoZXhlYykuYXNjaWkoKS5kYXRhKCkp
OworICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNl
dHRpbmcgdmFsdWUgJXMgdG8gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRh
KCksIGFWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwog
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEphdmFUeXBlQXJyYXk6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBKU1ZhbHVl
IEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAgICAgZm9yIChpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKICAgICAgICAgQ1N0cmluZyBqYXZhQ2xhc3NOYW1lID0gak1ldGhvZC0+cGFy
YW1ldGVyQXQoaSkudXRmOCgpOwogICAgICAgICBqQXJnc1tpXSA9IGNvbnZlcnRWYWx1ZVRvSlZh
bHVlKGV4ZWMsIG1fcm9vdE9iamVjdC5nZXQoKSwgZXhlYy0+YXJndW1lbnQoaSksIGphdmFUeXBl
RnJvbUNsYXNzTmFtZShqYXZhQ2xhc3NOYW1lLmRhdGEoKSksIGphdmFDbGFzc05hbWUuZGF0YSgp
KTsKLSAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2Qg
YXJnWyVkXSA9ICVzIiwgaSwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYykuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhSW5zdGFuY2U6Omludm9r
ZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIGp2YWx1ZSByZXN1
bHQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjUwogICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSWQgPSBnZXRNZXRob2RJRChvYmosIGpN
ZXRob2QtPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBqTWV0aG9kLT5zaWduYXR1cmUoKSk7CiAgICAg
ICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFu
ZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+cmV0dXJuVHlwZSgpLCBt
ZXRob2RJZCwgakFyZ3MuZGF0YSgpLCByZXN1bHQsIGNhbGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Myw3ICszNDMsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gNjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBz
dHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXQg
PSBRVmFyaWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLmltcGwo
KS0+Y2hhcmFjdGVycygpIDogMCkpOwogICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmlu
ZykKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7CkBAIC0zNTgsNyArMzU4LDcgQEAgUVZh
cmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgICAg
ICAqZGlzdGFuY2UgPSAxOwogICAgICAgICAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXQgPSBRVmFy
aWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwg
dXN0cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykK
ICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CkBAIC00MzksNyArNDM5LDcgQEAgUVZhcmlh
bnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIGludCBs
ZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRh
cnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOwotICAgICAgICAgICAg
ICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0
IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsK
IAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwpAQCAtNDUzLDcg
KzQ1Myw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAg
ICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5n
IHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFVTdHJp
bmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5n
LmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIFFWYXJp
YW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgICAgICAgICByZXQg
PSBRVmFyaWFudChyZXN1bHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgIFVTdHJpbmcg
dXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcg
dXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBs
KCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgUVN0
cmluZ0xpc3QgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7
CkBAIC00NzgsNyArNDc4LDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVj
U3RhdAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFCeXRlQXJyYXkocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkpLCBhcnItPmxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
ICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0
cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkudG9MYXRpbjEoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gNTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgfQogI2lmbmRlZiBRVF9OT19EQVRFU1RS
SU5HCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFy
Kil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CkBAIC01NzEs
NyArNTcxLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAg
ICAgICAgICAgICAgIFJlZ0V4cE9iamVjdCAqcmUgPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3Qq
PihvYmplY3QpOwogKi8KICAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBh
IGJpdCByaXNreQotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcg
PSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0
cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG9mIHRoZSBmb3Jt
ICcveHh4eHh4L2knCkBAIC01OTEsNyArNTkxLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9R
VmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNv
dWxkbid0IHBhcnNlIGEgSlMgcmVnZXhwIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAg
ICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwo
KS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgICAgIFFS
ZWdFeHAgcmUocXN0cmluZyk7CkBAIC0xNTk5LDcgKzE1OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2Jq
ZWN0ID0gYXNPYmo7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgSWRlbnRpZmllciBmdW5jSWRlbnQoZXhlYywgZnVuY05hbWUpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0ludGVybmFsczo6c2V0VXNlclByZWZlcnJl
ZExhbmd1YQogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkodmFsdWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB1c3RyaW5nVG9TdHJp
bmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIGxh
bmd1YWdlID0gdXN0cmluZ1RvU3RyaW5nKGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGxhbmd1YWdlKTsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0y
MyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEpTVmFsdWU6
OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5p
Y2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8K
KyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3Ry
aW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVy
bnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2Jq
ZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKwogMjAxMi0wMS0yMSAgVGltb3Ro
eSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBXZWJLaXQyIHJl
bWVtYmVyIHRoZSBoZWlnaHQgb2YgdGhlIFdlYiBJbnNwZWN0b3Igd2hlbiBpdCBpcyBkb2NrZWQu
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGlt
ZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIE5Q
UnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUCiAgICAgfQogCiAgICAgaWYgKHZhbHVl
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgTlBTdHJpbmcgbnBTdHJpbmcgPSBjcmVhdGVOUFN0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKS51dGY4KCkpOworICAgICAgICBOUFN0cmluZyBucFN0cmlu
ZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4
KCkpOwogICAgICAgICBTVFJJTkdOX1RPX05QVkFSSUFOVChucFN0cmluZy5VVEY4Q2hhcmFjdGVy
cywgbnBTdHJpbmcuVVRGOExlbmd0aCwgdmFyaWFudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMS0y
MyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEpTVmFsdWU6
OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5p
Y2FsIGNoYW5nZXMgdG8gY2FsbCB2YWx1ZSgpIGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8K
KyAgICAgICAgY29udmVydCBmcm9tICJKUyBzdHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3Ry
aW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAgICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVy
bnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZy
b21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9iYWxPYmplY3Q6aW5TY3Jp
cHRXb3JsZDpdKToKKwogMjAxMi0wMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIE1ha2UgV2ViQ29yZSBSdW5Mb29wIHdvcmsgZm9yIFdlYktpdDEKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTI1OCw3ICsxMjU4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmFkZFZhbAogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5
cGVdXTsKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9T
dHJpbmcoZXhlYykpXTsKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDp1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKV07CiAgICAgfSBlbHNlIGlmICh2YWx1
ZS5pc051bWJlcigpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6RG91YmxlVmFsdWVUeXBlXV07CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUudG9OdW1iZXIoZXhlYyldXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTA1NjU2KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEz
LDcgKzYxMyw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAg
ICAgICAgcmV0dXJuIEAiIjsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSktPmdsb2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gX3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCiAtIChOU1JlY3QpX2NhcmV0UmVjdEF0UG9z
aXRpb246KGNvbnN0IFBvc2l0aW9uJilwb3MgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkp
YWZmaW5pdHkKQEAgLTExOTEsNyArMTE5Miw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAiIjsKIAogICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQu
dG9TdHJpbmcoYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOworICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAg
ICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogfQogCiAtIChKU0dsb2JhbENvbnRleHRSZWYpX2dsb2JhbENvbnRleHRGb3JTY3JpcHRX
b3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjA0LDcgKzI2MDQsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhCiAgICAgICAgIHJldHVybiBTX09LOwogCiAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gdXN0cmlu
Z1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhhbnlXb3JsZEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBhbnlXb3JsZEdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmco
cmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgKmV2YWx1YXRpb25SZXN1
bHQgPSBCU3RyaW5nKHJlc3VsdFN0cmluZykucmVsZWFzZSgpOwogCiAgICAgcmV0dXJuIFNfT0s7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123671</attachid>
            <date>2012-01-23 17:23:51 -0800</date>
            <delta_ts>2012-01-23 21:26:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123172350.patch</filename>
            <type>text/plain</type>
            <size>150291</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtNTY2LDEzICs1NjYsMTMgQEAgX19aTkszSlNDMTlTb3VyY2VQcm92aWRlckNhY2hl
OGJ5dGVTaXplRQogX19aTkszSlNDNkpTQ2VsbDExdG9QcmltaXRpdmVFUE5TXzlFeGVjU3RhdGVF
TlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBlRQogX19aTkszSlNDNkpTQ2VsbDh0b051bWJlckVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOSzNKU0M2SlNDZWxsOHRvU3RyaW5nRVBOU185RXhl
Y1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0M2SlNDZWxsOWdldFN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVSTlNfN1VTdHJpbmdFCiBfX1pO
SzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTQXJyYXkxMnN1YmNsYXNz
RGF0YUV2CiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9OdW1iZXJTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0
ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMTZ0b09iamVjdFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRVBO
U18xNEpTR2xvYmFsT2JqZWN0RQorX19aTkszSlNDN0pTVmFsdWUxNnRvU3RyaW5nU2xvd0Nhc2VF
UE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE5c3ludGhlc2l6ZVByb3RvdHlwZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMjB0b1RoaXNPYmplY3RTbG93Q2FzZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGF0
ZUUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmkKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBwdXRjaGFyKCcgJyk7CiAKLSAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMt
PmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwcmlu
dGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHB1dGNoYXIoJ1xuJyk7CkBAIC0yNDgsNyArMjQ4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzXG4iLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS51dGY4KCkuZGF0YSgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xuIiwg
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTI3Nyw3ICsyNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVy
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYg
KCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBm
aWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxl
LiIpKSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFy
PiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1l
LCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTQ4Nyw5
ICs0ODcsOSBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICBp
ZiAoZHVtcCkgewogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24u
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJp
bnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIGdsb2JhbERhdGEuc3RvcFNhbXBsaW5nKCk7CkBAIC01
NDYsOSArNTQ2LDkgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0Kgog
ICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBqc2NTb3VyY2UobGlu
ZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRp
b24pOwogI2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAg
ICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5n
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNyAr
MjkzLDcgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAogCiAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCi0gICAgUmVmUHRyPE9w
YXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3Bh
cXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9u
KQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZGVmCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDEwICszMzksMTAgQEAgRVhQT1JUUwogICAgID90b051bWJlclNs
b3dDYXNlQEpTVmFsdWVASlNDQEBBQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9PYmplY3RA
SlNDZWxsQEpTQ0BAUUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0dsb2JhbE9i
amVjdEAyQEBaCiAgICAgP3RvT2JqZWN0U2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRVBBVkpTT2Jq
ZWN0QDJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgotICAgID90b1N0cmlu
Z0BKU0NlbGxASlNDQEBRQkU/QVZVU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/dG9T
dHJpbmdASlNPYmplY3RASlNDQEBRQkU/QVZVU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJAQFoKKyAg
ICA/dG9TdHJpbmdASlNPYmplY3RASlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvU3RyaW5nRGVjaW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoK
ICAgICA/dG9TdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoK
KyAgICA/dG9TdHJpbmdTbG93Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNTdHJpbmdAMkBQQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b1RoaXNPYmplY3RASlNPYmplY3RASlNDQEBTQVBBVjEyQFBB
VkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvVGhpc09iamVjdFNsb3dDYXNlQEpT
VmFsdWVASlNDQEBBQkVQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvVUlu
dDMyQElkZW50aWZpZXJASlNDQEBTQUlBQlZVU3RyaW5nQDJAQUFfTkBaCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0
cmluZyhFeGVjUwogICAgICAgICByZXR1cm4gIjAiOwogCiAgICAgaWYgKHZhbC5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNjYXBlUXVvdGVzKHZhbC50b1N0
cmluZyhleGVjKSksICJcIiIpOworICAgICAgICByZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNj
YXBlUXVvdGVzKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCAiXCIiKTsKIAogICAg
IHJldHVybiB2YWwuZGVzY3JpcHRpb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3
LDcgKzE5Nyw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiAKICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAg
Ly8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9u
LgotICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOwor
ICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2VwdGlvbikgewogICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChzdHJpY3QpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlk
ZW50LCB2YWx1ZSwgc2xvdCk7CkBAIC0yNTksMTEgKzI1OSw4IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICAKICAgICBBU1NFUlQoIW9wMS5pc051bWJlcigp
IHx8ICFvcDIuaXNOdW1iZXIoKSk7CiAgICAgCi0gICAgaWYgKG9wMS5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIGlmIChvcDIuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcob3AxKSwgYXNTdHJpbmcob3AyKSkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSks
IG9wMi50b1ByaW1pdGl2ZVN0cmluZyhleGVjKSkpOwotICAgIH0KKyAgICBpZiAob3AxLmlzU3Ry
aW5nKCkgJiYgIW9wMi5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSksIG9wMi50b1N0cmluZyhleGVjKSkpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZFNsb3dDYXNlKGV4ZWMsIG9wMSwgb3AyKSk7
CiB9CkBAIC0zMDYsNyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgICAgICB9CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpZGVudChleGVjLCBw
cm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBwcm9w
ZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCkBAIC0zMjYsNyArMzIzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIElkZW50aWZpZXIg
aWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgaWRl
bnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGlkZW50KSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwMywxMCArMTMwMyw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIHYyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUo
KTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0g
ICAgaWYgKHYxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB2Mi5pc1N0
cmluZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCBh
c1N0cmluZyh2MikpCi0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmco
djEpLCB2Mi50b1ByaW1pdGl2ZVN0cmluZyhjYWxsRnJhbWUpKTsKKyAgICBpZiAodjEuaXNTdHJp
bmcoKSAmJiAhdjIuaXNPYmplY3QoKSkgeworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI0NjEsNyArMjQ1OSw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogICAgIH0KICAgICAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIg
cHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUo
Y2FsbEZyYW1lKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFt
ZSwgcHJvcGVydHkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMjQ4OCw3ICsyNDg2LDcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVS
Tl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNj
cmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShj
YWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
KTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsK
ICAgICB9CiAgICAgCkBAIC0yNTE4LDcgKzI1MTYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIGlmICghaXNKU0J5dGVBcnJheShiYXNlVmFsdWUp
KQogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
dmFsKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJh
bWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHBy
b3BlcnR5KTsKICAgICB9CiAgICAgCkBAIC0yNTc5LDcgKzI1NzcsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
YmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxG
cmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0
LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICBpZiAoIXN0
YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmpl
Y3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAg
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7
CkBAIC0yNjIwLDcgKzI2MTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRf
YnlfdmFsCiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWwpKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vi
c2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFt
ZSkpOwogICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8v
IERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgog
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHBy
b3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0zMzg2LDcgKzMzODQsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgaWYgKHByb3BOYW1lLmdldFVJbnQzMihp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFz
UHJvcGVydHkoY2FsbEZyYW1lLCBpKSkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHByb3BOYW1lLnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIgcHJv
cGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxs
RnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0
eSkpKTsKIH0KQEAgLTM0OTgsNyArMzQ5Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmosIGNhbGxGcmFtZSwgaSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJh
bWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwog
ICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShi
YXNlT2JqLCBjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAgICB9CkBAIC0zNTM5LDcgKzM1MzcsNyBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19yZWZlCiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgVVN0cmluZyBtZXNzYWdl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1
ZShjYWxsRnJhbWUpOwogICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENF
UFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw3ICsxOTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFVTdHJpbmcgc3RyID0gZWxlbWVudC50b1N0cmlu
ZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgc3RyQnVmZmVyW2tdID0gc3RyLmltcGwoKTsKICAgICAgICAg
dG90YWxTaXplICs9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgYWxsU3RyaW5nczhCaXQgPSBhbGxT
dHJpbmdzOEJpdCAmJiBzdHIuaXM4Qml0KCk7CkBAIC0yNzIsOSArMjcyLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZl
cnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENh
bGxUeXBlTm9uZSkKLSAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25G
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSku
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RyID0gY2FsbChleGVjLCBjb252ZXJz
aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0
KCkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAg
IHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAg
c3RyQnVmZmVyLmFwcGVuZChzdHIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjk3LDcgKzI5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIFVTdHJp
bmcgc2VwYXJhdG9yOwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgc2VwYXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIHNlcGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChpc0pTQXJyYXkodGhpc09i
aikpIHsKQEAgLTMwOCw3ICszMDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICAgICAgZ290byBza2lwRmlyc3RMb29wOwogICAgICAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgaWYg
KCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RyQnVmZmVy
LmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzdHJCdWZm
ZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
ICAgIGsrKzsKICAgICAgICAgfQogCkBAIC0zMTksNyArMzE5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBl
bmQoJywnKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhl
eGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewpAQCAtMzI4LDcgKzMyOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
ICAgICBzdHJCdWZmZXIuYXBwZW5kKHNlcGFyYXRvcik7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgICAgIGlmICghZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBzdHJC
dWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM0Myw3ICszNDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0ckJ1ZmZlci5idWlsZChleGVjKSk7CkBAIC00MjksNyArNDI5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggKyBuLCBleGVjLT5hcmd1
bWVudChuKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9T
dHJpbmcoZXhlYykpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoZXhlYywg
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRf
dD4obikpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB0aGlzT2Jq
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT5h
cmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIGJvb2wgb3BJbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdQogICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJl
dHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBpKTsKIAotICAgIElkZW50aWZpZXIgcHJv
cGVydHkoZXhlYywgcHJvcE5hbWUudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgcHJv
cGVydHkoZXhlYywgcHJvcE5hbWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBDYWxsVHlw
ZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihwYXJzZURhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
Tm93KEV4ZWNTdGF0ZSopCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwx
MyArMTU0LDEzIEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAg
ICBib29sIHVzZUN1c3RvbUZvcm1hdCA9IGZhbHNlOwogICAgIFVTdHJpbmcgY3VzdG9tRm9ybWF0
U3RyaW5nOwogCi0gICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChhcmcwU3RyaW5nID09ICJjdXN0
b20iICYmICFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIHVzZUN1
c3RvbUZvcm1hdCA9IHRydWU7Ci0gICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBl
eGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgfSBlbHNl
IGlmIChmb3JtYXQgPT0gTG9jYWxlRGF0ZUFuZFRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkKCkpIHsKICAgICAgICAgZGF0ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFy
ZzBTdHJpbmcsIGRhdGVTdHlsZSk7Ci0gICAgICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0
cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgdGltZVN0eWxlKTsKKyAgICAg
ICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgdGltZVN0eWxlKTsKICAgICB9IGVsc2UgaWYgKGZvcm1h
dCAhPSBMb2NhbGVUaW1lICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0eWxl
KTsKICAgICBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlRGF0ZSAmJiAhZXhlYy0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQy
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgICAgICB9CisKICAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBFcnJvckluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEVycm9ySW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBVU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwg
bWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBhcHBlbmRTb3VyY2VU
b01lc3NhZ2UoKSB7IHJldHVybiBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogICAgIGlmIChuYW1lLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIG5hbWVTdHJpbmcgPSAiRXJyb3IiOwogICAgIGVsc2UgewotICAgICAgICBuYW1l
U3RyaW5nID0gbmFtZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KQEAgLTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGVycm9yUHJvdG9GCiAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbWVz
c2FnZVN0cmluZyA9ICIiOwogICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVz
c2FnZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcg
KzExMyw3IEBAIEpTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEUKICAgICAK
IEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIG9wLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0g
bWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKSwgIicgaXMgbm90IGEgdmFsaWQg
YXJndW1lbnQgZm9yICciLCBvcCwgIiciKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1h
a2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBu
b3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgJyIsIG9wLCAiJyIpOwogICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0
YW5jZSo+KGV4Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTIyLDcg
KzEyMiw3IEBAIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3QKIAogSlNP
YmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwg
dmFsdWUudG9TdHJpbmcoZXhlYyksICInIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7CisgICAgVVN0
cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSwgIicgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNT
RVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9y
SW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTEz
MSw3ICsxMzEsNyBAQCBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlCiAK
IEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIs
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgIFVTdHJp
bmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyksICInIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChl
eGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3Rh
bmNlKj4oZXhjZXB0aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xNDAsNyAr
MTQwLDcgQEAgSlNPYmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdAogCiBKU09i
amVjdCogY3JlYXRlTm90QW5PYmplY3RFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYW4gb2JqZWN0Iik7CisgICAgVVN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSwgIicgaXMgbm90IGFuIG9iamVjdCIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
LT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4
Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNyArOTYsMTcgQEAgSlNPYmpl
Y3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIGlmIChhcmdzLmlzRW1wdHko
KSkKICAgICAgICAgcHJvZ3JhbSA9ICIoZnVuY3Rpb24oKSB7IFxufSkiOwogICAgIGVsc2UgaWYg
KGFyZ3Muc2l6ZSgpID09IDEpCi0gICAgICAgIHByb2dyYW0gPSBtYWtlVVN0cmluZygiKGZ1bmN0
aW9uKCkgeyAiLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCAiXG59KSIpOworICAgICAgICBw
cm9ncmFtID0gbWFrZVVTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyksICJcbn0pIik7CiAgICAgZWxzZSB7CiAgICAgICAgIFVTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoZnVuY3Rpb24oIik7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYXJncy5zaXplKCkgLSAxOyBpKysp
IHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
fQogICAgICAgICBidWlsZGVyLmFwcGVuZCgiKSB7ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZChhcmdzLmF0KGFyZ3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChhcmdzLmF0KGFyZ3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxufSkiKTsKICAgICAgICAgcHJvZ3Jh
bSA9IGJ1aWxkZXIudG9VU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0TGVuZ3Ro
IC0gbnVtQm91bmRBcmdzOwogICAgIH0KIAotICAgIElkZW50aWZpZXIgbmFtZShleGVjLCB0YXJn
ZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKSk7
CisgICAgSWRlbnRpZmllciBuYW1lKGV4ZWMsIHRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm5hbWUpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCwgdGFyZ2V0T2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSwgYm91bmRBcmdzLCBsZW5ndGgs
IG5hbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2Vz
IGFuIGV4Y2VwdGlvbi4KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNb
aV0uZmlyc3QudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTMgKzE0NSw2IEBAIGRvdWJsZSBK
U0NlbGw6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNPYmplY3QqPih0aGlzKS0+dG9OdW1iZXIoZXhlYyk7CiB9CiAKLVVTdHJpbmcgSlND
ZWxsOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50
b1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QqPih0
aGlzKS0+dG9TdHJpbmcoZXhlYyk7Ci19Ci0KIEpTT2JqZWN0KiBKU0NlbGw6OnRvT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAg
ICBpZiAoaXNTdHJpbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0cmluZyB0b1N0cmluZyhF
eGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRv
T2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw4ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKIHsKLSAgICBVU3RyaW5nIHN0
ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIENTdHJpbmcgY3N0ciA9
IHN0ci51dGY4KHRydWUpOworICAgIENTdHJpbmcgY3N0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KHRydWUpOwogICAgIGlmICghY3N0ci5kYXRh
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVVSSUVycm9yKGV4ZWMs
ICJTdHJpbmcgY29udGFpbmVkIGFuIGlsbGVnYWwgVVRGLTE2IHNlcXVlbmNlLiIpKTsKIApAQCAt
MTQzLDcgKzE0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGMK
IHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRvTm90
VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewogICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgCiAgICAgaWYgKHN0ci5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGRlY29kZShl
eGVjLCBzdHIuY2hhcmFjdGVyczgoKSwgc3RyLmxlbmd0aCgpLCBkb05vdFVuZXNjYXBlLCBzdHJp
Y3QpOwpAQCAtNTEzLDcgKzUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0UKICAgICBpZiAoIXguaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh4KTsKIAotICAgIFVTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAocy5pczhC
aXQoKSkgewogICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5j
aGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09OKTsKQEAgLTU1Niw3ICs1NTUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgfQogCiAg
ICAgLy8gSWYgVG9TdHJpbmcgdGhyb3dzLCB3ZSBzaG91bGRuJ3QgY2FsbCBUb0ludDMyLgotICAg
IFVTdHJpbmcgcyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAg
LTU2NSw3ICs1NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQ
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFy
c2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQoZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMpCkBAIC02MjMsNyArNjIyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgICAgICAiKist
Li9AXyI7CiAKICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3RyID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChzdHIu
aXM4Qml0KCkpIHsKICAgICAgICAgY29uc3QgTENoYXIqIGMgPSBzdHIuY2hhcmFjdGVyczgoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IHN0ci5sZW5ndGgoKTsgaysrLCBjKysp
IHsKQEAgLTY2Miw3ICs2NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNFCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVVN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3Ry
aW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcg
c3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGludCBrID0gMDsKICAgICBpbnQgbGVuID0gc3RyLmxlbmd0aCgpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEw
NTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHVu
d3JhcEJveGVkUHJpbWl0aQogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6
OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBqc051bWJlcihvYmplY3QtPnRvTnVtYmVyKGV4ZWMp
KTsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQotICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgb2JqZWN0LT50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgIHJldHVybiBvYmplY3QtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChvYmplY3QtPmluaGVy
aXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQogICAgICAgICByZXR1cm4gb2JqZWN0LT50b1By
aW1pdGl2ZShleGVjKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0yMjMsMjUgKzIyMywxMiBAQCBT
dHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgaWYgKG5hbWUuZ2V0U3RyaW5n
KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQ
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmFt
ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBuYW1lLmFzTnVtYmVyKCkpKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKG5h
bWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIGlmICghYXNPYmplY3QobmFtZSktPmlu
aGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykgJiYgIWFzT2JqZWN0KG5hbWUpLT5pbmhlcml0
cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC04MjUsOCArODEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU09OUHJvdG9GdQogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJKU09O
LnBhcnNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIiKSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIFVTdHJpbmcgc291cmNlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsMTEgKzUxOCwxMSBAQCBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlCiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKIH0KIAotVVN0
cmluZyBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNTdHJpbmcq
IEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1
ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4g
anNFbXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVt
YmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0
b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0
cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgICAgIC8vIE5P
VEU6IEpTT2JqZWN0IGFuZCBpdHMgc3ViY2xhc3NlcyBtdXN0IGJlIGFibGUgdG8gZ3JhY2VmdWxs
eSBoYW5kbGUgRXhlY1N0YXRlKiA9IDAsCiAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxsIG1h
eSBjb21lIGZyb20gaW5zaWRlIHRoZSBjb21waWxlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5
LDExICsyMjksNiBAQCBkb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgcmV0dXJuIGpzVG9OdW1iZXIodmFsdWUoZXhlYykpOwogfQogCi1VU3RyaW5nIEpTU3RyaW5n
Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZhbHVlKGV4
ZWMpOwotfQotCiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJp
bmcpCiB7CiAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE3LDcgKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9v
bCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUm
KSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
CiAgICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC00NTMsMjQgKzQ1Miwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzVHJ1ZSgpOyAvLyBmYWxzZSwg
bnVsbCwgYW5kIHVuZGVmaW5lZCBhbGwgY29udmVydCB0byBmYWxzZS4KICAgICB9CiAKLSAgICBp
bmxpbmUgVVN0cmluZyBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cisg
ICAgaW5saW5lIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlm
IChpc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVy
aWNTdHJpbmdzLmFkZChhc0ludDMyKCkpOwotICAgICAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKGFzRG91
YmxlKCkpOwotICAgICAgICBpZiAoaXNUcnVlKCkpCi0gICAgICAgICAgICByZXR1cm4gInRydWUi
OwotICAgICAgICBpZiAoaXNGYWxzZSgpKQotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7Ci0g
ICAgICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAg
IGlmIChpc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwotICAg
ICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvU3RyaW5n
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxs
KCkpOworICAgICAgICByZXR1cm4gdG9TdHJpbmdTbG93Q2FzZShleGVjKTsKICAgICB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTAgKzIwNCw5IEBAIGJvb2wg
SlNWYWx1ZTo6aXNWYWxpZENhbGxlZSgpCiAgICAgcmV0dXJuIGFzT2JqZWN0KGFzQ2VsbCgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiB9CiAKLUpTU3RyaW5nKiBKU1ZhbHVlOjp0b1ByaW1pdGl2ZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgaWYgKGlzU3RyaW5nKCkpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICBBU1NFUlQo
IWlzU3RyaW5nKCkpOwogICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmlu
ZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3Mu
YWRkKGFzSW50MzIoKSkpOwogICAgIGlmIChpc0RvdWJsZSgpKQpAQCAtMjIyLDEwICsyMjEsMTEg
QEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvUHJpbWl0aXZlU3RyaW5nKEV4ZQogICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlZmlu
ZWQudXN0cmluZygpKTsKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgSlNWYWx1ZSB2ID0g
YXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIE5vUHJlZmVyZW5jZSk7Ci0gICAgaWYgKHYuaXNT
dHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odi5hc0NlbGwo
KSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHYudG9TdHJpbmco
ZXhlYykpOworICAgIEpTVmFsdWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywg
UHJlZmVyU3RyaW5nKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7
CisgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9u
IDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk3LDggKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUg
aWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRl
IGFscmVhZHkuCiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNTdHJp
bmcqIHRvUHJpbWl0aXZlU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1N0cmlu
ZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKQEAgLTI0NSw2ICsyNDQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBpbmxpbmUgY29uc3QgSlNWYWx1ZSBhc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVt
YmVyU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTU3RyaW5nKiB0b1N0cmlu
Z1Nsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9UaGlzT2JqZWN0U2xv
d0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bnVtYmVyUHJvdG8KICAgICAgICAgcmFkaXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJhZGl4VmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpKTsgLy8gbmFuIC0+IDAKIAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBqc051bWJlcih4KS50
b1N0cmluZyhleGVjKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KHgpLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIC8vIEZhc3QgcGF0aCBmb3IgbnVtYmVyIHRvIGNo
YXJhY3RlciBjb252ZXJzaW9uLgogICAgIGlmIChyYWRpeCA9PSAzNikgewpAQCAtNDc0LDcgKzQ3
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICBpZiAo
IXRvVGhpc051bWJlcihleGVjLT5ob3N0VGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywganNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcg
KzE0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIHsKICAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgcHJvcGVydHkg
ZGVzY3JpcHRvciBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9iamVjdC4iKSk7Ci0gICAgVVN0
cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CkBAIC0yOTIsNyArMjkyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlmICghZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3Rz
LiIpKTsKICAgICBKU09iamVjdCogTyA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlz
VmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+aGFzT3duUHJv
cGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQ5LDcg
KzE0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEoZXhlYy0+YXJndW1lbnQoMSks
IGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwot
ICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZUdldHRlcih0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwg
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWZpbmVHZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgxKSksIDApOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENh
bGxEYXRhKGV4ZWMtPmFyZ3VtZW50KDEpLCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJp
bnZhbGlkIHNldHRlciB1c2FnZSIpKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWZpbmVTZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgMCk7
CisgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lU2V0dGVyKHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xNzIsNyArMTcyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3Vw
R2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBH
ZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4MSwxMyAr
MTgxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3Qt
Pmxvb2t1cFNldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+
bG9va3VwU2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhl
YyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUo
ZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKSkpOwogfQogCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9j
YWxlU3RyaW5nKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDExIEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEYKICAgICBKU1ZhbHVlIHAxID0g
djEudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRp
dmUoY2FsbEZyYW1lKTsKIAotICAgIGlmIChwMS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJldHVy
biBwMi5pc1N0cmluZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJp
bmcocDEpLCBhc1N0cmluZyhwMikpCi0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwg
YXNTdHJpbmcocDEpLCBqc1N0cmluZyhjYWxsRnJhbWUsIHAyLnRvU3RyaW5nKGNhbGxGcmFtZSkp
KTsKLSAgICB9CisgICAgaWYgKHAxLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwgcDIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisKICAg
ICBpZiAocDIuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwg
anNTdHJpbmcoY2FsbEZyYW1lLCBwMS50b1N0cmluZyhjYWxsRnJhbWUpKSwgYXNTdHJpbmcocDIp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDEudG9TdHJpbmcoY2FsbEZy
YW1lKSwgYXNTdHJpbmcocDIpKTsKIAogICAgIHJldHVybiBqc051bWJlcihwMS50b051bWJlcihj
YWxsRnJhbWUpICsgcDIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDEwICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdHJp
bmdzW2ldLmpzVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0
YSwgdi50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYu
dG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkg
PCBvbGRMZW5ndGgpIC8vIFRydWUgZm9yIG92ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKQEAgLTk3LDIwICs5NCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRl
cigqZ2xvYmFsRGF0YSk7Ci0KLSAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHRoaXNWYWx1ZSkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0
YSwgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVu
ZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0
aCA9IDA7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudChp
KTsKLSAgICAgICAgICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgcm9wZUJ1
aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0YSwgdi50b1N0cmluZyhl
eGVjKSkpOworICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYudG9TdHJpbmcoZXhlYykp
OwogCiAgICAgICAgICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkgPCBvbGRMZW5ndGgpIC8v
IFRydWUgZm9yIG92ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKQEAgLTMwMCwxMSArMjkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIodjEuYXNOdW1iZXIoKSArIHYyLmFzTnVtYmVyKCkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHYxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB2Mi5pc1N0cmlu
ZygpCi0gICAgICAgICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwg
YXNTdHJpbmcodjIpKQotICAgICAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0
cmluZyh2MSksIHYyLnRvUHJpbWl0aXZlU3RyaW5nKGNhbGxGcmFtZSkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2Mi5pc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxs
RnJhbWUpKTsKIAogICAgICAgICAvLyBBbGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1v
bgogICAgICAgICByZXR1cm4ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBA
QCB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoSlNDZWxsKiBjZWxsCiAKIHZvaWQgc2V0UmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCkt
PnNldElucHV0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBhc1JlZ0V4cENvbnN0cnVjdG9y
KGJhc2VPYmplY3QpLT5zZXRJbnB1dCh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogfQogCiB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCkBAIC0zMjMsMTMgKzMyMywx
MyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJl
dHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CiAKLSAgICBVU3RyaW5nIHBhdHRlcm4gPSBhcmcw
LmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdz
OwogICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGZsYWdzID0gcmVnRXhw
RmxhZ3MoYXJnMS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3Mo
YXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGZsYWdzID09
IEludmFsaWRGbGFncykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIz
MSw3IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjpleGVjKEV4ZWNTdGF0ZSogZXgKIGJvb2wgUmVn
RXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwotICAgIFVTdHJpbmcgaW5wdXQgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgaWYgKCFyZWdFeHAoKS0+Z2xvYmFsKCkpIHsKICAg
ICAgICAgaW50IHBvc2l0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsMTMgKzExMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiQ2Fubm90IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGluZyBvbmUgUmVn
RXhwIGZyb20gYW5vdGhlci4iKSk7CiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFy
ZzApLT5yZWdFeHAoKTsKICAgICB9IGVsc2UgewotICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSAh
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0
cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBSZWdFeHBGbGFncyBmbGFncyA9IE5vRmxhZ3M7
CiAgICAgICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBmbGFncyA9
IHJlZ0V4cEZsYWdzKGFyZzEudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgZmxhZ3MgPSBy
ZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJbnZh
bGlkRmxhZ3MpCkBAIC0xNTMsNyArMTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90bwogICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwogICAgIGlmICh0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9C
b29sZWFuKGV4ZWMpKQogICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKLSAgICBVU3RyaW5n
IHNvdXJjZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291
cmNlKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNPYmplY3QtPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgLy8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzopLyIgdG8gYXZv
aWQgY29sbGlkaW5nIHdpdGggY29tbWVudCBzeW50YXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIi8iLCBzb3VyY2UubGVuZ3RoKCkgPyBz
b3VyY2UgOiBVU3RyaW5nKCIoPzopIiksIHBvc3RmaXgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKICAgICAKLSAg
ICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKQotICAgICAg
ICA/IGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKQotICAgICAgICA6IGpzU3RyaW5nKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKCksIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Ry
aW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0
VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTExLDcgKzEwOCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiB9CiAKIENhbGxUeXBlIFN0cmluZ0NvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBzdGF0aWMg
TkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXBsYWNl
bWVudFN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgcmVwbGFj
ZW1lbnRTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
CiAgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICB1
bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CkBAIC01MDIsMTAgKzUwMiw3IEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgICAgIGlmIChM
SUtFTFkocmVzdWx0LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGFzU3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRv
U3RyaW5nKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJh
bWUoZXhlYykpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNTQ3LDEwICs1NDQs
NyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAKICAgICAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3Vs
dC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNhY2hlZENhbGwubmV3Q2Fs
bEZyYW1lKGV4ZWMpKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU5NCw3ICs1
ODgsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAg
ICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0KSk7CiAgICAg
ICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyaW5nKTsKIAotICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0
YSwganNVbmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTYzMyw3ICs2MjcsNyBA
QCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSBy
ZXBsYWNlVmFsdWUpCiB7CiAgICAgY29uc3QgVVN0cmluZyYgc3RyaW5nID0ganNTdHJpbmctPnZh
bHVlKGV4ZWMpOwotICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NTMsNyAr
NjQ3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAg
ICBVU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY2NSwxMiArNjU5LDkgQEAg
c3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKLSAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgICAgICB0aGlzVmFsdWUgPSBqc1N0cmluZyhleGVj
LCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwotICAgIH0KLSAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcodGhpc1ZhbHVlKTsKKyAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IEpTVmFsdWUgcmVwbGFjZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTY5OCw3ICs2
ODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwogICAgIEpTVmFs
dWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewpAQCAt
NzE4LDcgKzcwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7CiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigp
KSB7CkBAIC03MzksMTIgKzczMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29u
Y2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAxKSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVu
dCgwKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2LmlzU3RyaW5nKCkKLSAgICAg
ICAgICAgID8ganNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwgYXNTdHJpbmcodikp
Ci0gICAgICAgICAgICA6IGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIGpzU3Ry
aW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHYudG9TdHJpbmcoZXhlYykpKSk7Ci0gICAgfQorICAg
IGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAmJiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5n
KHRoaXNWYWx1ZSksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisKICAgICBp
ZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxl
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmdGcm9tQXJndW1lbnRzKGV4ZWMsIHRoaXNWYWx1ZSkpOwpAQCAt
NzU1LDEyICs3NDMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwotICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBwb3M7
CiAgICAgaWYgKGExLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHBvcyA9IDA7CkBAIC03ODYsMTMg
Kzc3NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFs
dWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1l
bnQoMSk7CiAKLSAgICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBkb3VibGUgZHBvcyA9
IGExLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwogICAgIGlmIChkcG9zIDwgMCkKICAgICAg
ICAgZHBvcyA9IDA7CkBAIC04MTAsNyArNzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tP
YmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTgyNSw3ICs4MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1
bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVy
IEVDTUEgMTUuMTAuNC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkg
c3RyaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmlu
ZyhleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJy
b3IoZXhlYywgcmVnLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KQEAgLTg2Miw3ICs4NTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtODc3LDcgKzg2
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
ICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhw
KHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlzIHVuZGVm
aW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAgICAgICBy
ZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkg
PyBVU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVn
ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8g
VVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxhZ3MpOwog
ICAgICAgICBpZiAoIXJlZy0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWctPmVycm9yTWVzc2FnZSgpKSk7
CiAgICAgfQpAQCAtODkzLDcgKzg4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0
Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0
aCgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtOTI1LDcgKzkx
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAgIC8v
IDIuIExldCBTIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb1N0cmluZywgZ2l2aW5nIGl0IHRo
ZSB0aGlzIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4KICAgICAvLyA2LiBMZXQgcyBiZSB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgaW4gUy4KLSAgICBVU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogCiAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRl
ZCBhcyBpZiBieSB0aGUgZXhwcmVzc2lvbiBuZXcgQXJyYXkoKQogICAgIC8vICAgIHdoZXJlIEFy
cmF5IGlzIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBjb25zdHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4K
QEAgLTEwMjcsNyArMTAxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVT
dHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IFVTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogCiAgICAgICAgIC8vIDkuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KICAgICAgICAg
aWYgKCFsaW1pdCkKQEAgLTExMTQsNyArMTEwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
dVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgdVN0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CkBAIC0xMTQ0LDI0ICsx
MTMyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpbnQgbGVuOwotICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IDA7Ci0gICAgVVN0cmlu
ZyB1U3RyaW5nOwotICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBqc1N0
cmluZyA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odGhpc1ZhbHVlLmFzQ2VsbCgpKTsKLSAgICAg
ICAgbGVuID0ganNTdHJpbmctPmxlbmd0aCgpOwotICAgIH0gZWxzZSBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAg
ICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNp
YmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7Ci0gICAg
fQorCisgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgaW50IGxlbiA9IGpz
U3RyaW5nLT5sZW5ndGgoKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMp
OwogICAgIGRvdWJsZSBlbmQ7CkBAIC0xMTg1LDkgKzExNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgfQogICAgIHVuc2lnbmVkIHN1YnN0cmluZ1N0
YXJ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KTsKICAgICB1bnNpZ25lZCBzdWJzdHJp
bmdMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN1YnN0cmluZ1N0YXJ0Owot
ICAgIGlmIChqc1N0cmluZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0
cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywgdVN0cmluZywgc3Vi
c3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdWJzdHJpbmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdM
ZW5ndGgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMTk1LDcgKzExNzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS5pc1N0cmlu
ZygpID8gYXNTdHJpbmcodGhpc1ZhbHVlKSA6IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKSk7CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCiAgICAgaW50
IHNTaXplID0gcy5sZW5ndGgoKTsKQEAgLTEyMTQsNyArMTE5Miw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLmlzU3RyaW5nKCkgPyBhc1N0
cmluZyh0aGlzVmFsdWUpIDoganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBj
b25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBz
Lmxlbmd0aCgpOwpAQCAtMTI1NywxMCArMTIzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVj
a09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
LSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihsb2NhbGVDb21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTI2OCw3ICsxMjQ2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8YmlnPiIsIHMsICI8L2JpZz4iKSk7CiB9CiAKQEAgLTEyNzcsNyArMTI1NSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHNtYWxsPiIsIHMsICI8L3NtYWxsPiIpKTsKIH0KIApAQCAtMTI4Niw3ICsxMjY0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxpbms+IikpOwogfQogCkBAIC0xMjk1LDcgKzEy
NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxiPiIsIHMsICI8L2I+IikpOwogfQogCkBAIC0xMzA0LDcgKzEyODIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7CiB9CiAKQEAgLTEzMTMsNyArMTI5MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGk+IiwgcywgIjwvaT4iKSk7CiB9CiAKQEAgLTEzMjIsNyArMTMwMCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiPHN0cmlrZT4iLCBzLCAiPC9zdHJpa2U+IikpOwogfQogCkBAIC0xMzMxLDcgKzEz
MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxzdWI+IiwgcywgIjwvc3ViPiIpKTsKIH0KIApAQCAtMTM0MCw3ICsx
MzE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8c3VwPiIsIHMsICI8L3N1cD4iKSk7CiB9CiAKQEAgLTEzNDksOSAr
MTMyNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1Zh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxm
b250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Ijxmb250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXCI+Iiwg
cywgIjwvZm9udD4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTM1OSw3ICsxMzM3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCiAgICAgdWludDMy
X3Qgc21hbGxJbnRlZ2VyOwpAQCAtMTM5Niw3ICsxMzc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBpbXBsKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwg
YTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIi
LCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3Io
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTQwNCw5ICsxMzgyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNWYWx1
ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMp
LCAiXCI+IiwgcywgIjwvYT4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCAiXCI+IiwgcywgIjwvYT4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDE0LDkg
KzEzOTIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0g
ICAgVVN0cmluZyBsaW5rVGV4dCA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgbGlu
a1RleHQgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBs
aW5rVGV4dFNpemUgPSBsaW5rVGV4dC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBzdHJpbmdTaXpl
ID0gcy5sZW5ndGgoKTsKQEAgLTE0NTksNyArMTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSB0cmltU3RyaW5nKEV4ZWNTdGEKIHsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CiAgICAgaWYgKHRyaW1LaW5kICYgVHJpbUxlZnQpIHsK
ICAgICAgICAgd2hpbGUgKGxlZnQgPCBzdHIubGVuZ3RoKCkgJiYgaXNUcmltV2hpdGVzcGFjZShz
dHJbbGVmdF0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KKworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmlu
ZyogaW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGVJ
bnRlcm5hbCk6CisKIDIwMTItMDEtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgYSBuZXcgYWxsb2NhdG9yIGZvciBiYWNraW5n
IHN0b3JlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUsNyArMjE1LDcgQEAgQ0ZUeXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbChKU1Zh
bAogCiAgICAgICAgIGlmIChpblZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgVVN0cmluZyB1U3RyaW5nID0gaW5WYWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVTdHJpbmcgPSBpblZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBVU3RyaW5nVG9DRlN0cmluZyh1
U3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI5IEBACisyMDEyLTAxLTIzICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmco
KSBzaG91bGQgcmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdl
cyB0byBjYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBj
b252ZXJ0IGZyb20gIkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3Ry
aW5nKSwgc2luY2UKKyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysg
c3RyaW5nIi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJk
OjpnZXREYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3Vw
TmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2spOgorICAgICAgICAo
V2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
Rm9ybURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Gb3JtRGF0YTo6YXBw
ZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2aWNlTW90aW9uRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZp
Y2VPcmllbnRhdGlvbkV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxD
YW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246
Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkb2N1bWVudFdyaXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJ
bnB1dEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJl
Zik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9j
YXRpb246OnNldEhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
TG9jYXRpb246OnNldEhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUluaXRNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNh
Y3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6ZXhl
Y3V0ZVNxbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVT
cWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTU2hh
cmVkV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6
OmNsb3NlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dvcmtlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1hNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVk
dWxlZEFjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keSk6
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgor
ICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWZpbml0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIGJyaWRn
ZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFs
dWVUb0pPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZh
QXJyYXkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHA6CisgICAgICAgIChKYXZh
RmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2
YUluc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAqIHRlc3RpbmcvanMvSlNJbnRlcm5h
bHNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcm5hbHM6OnNldFVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMpOgorCiAyMDEyLTAxLTE4ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBkZWxheWVkIERDIGFsbG9jYXRpb24gaW4gSFduZERD
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUKICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQz
MihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgogICAg
IHJldHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnB1dERlbGVnYXRlKAogCiBKU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUodXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBK
U1ZhbHVlIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlCiAgICAgfQogCiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgIGNsaXBib2FyZC0+Y2xlYXJE
YXRhKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIApAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJk
OjpnZXREYXRhKEV4ZWNTdGF0ZSogCiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7
CiAKICAgICBib29sIHN1Y2Nlc3M7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0
RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBz
dWNjZXNzKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY2xpcGJvYXJkLT5nZXREYXRhKHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBz
dWNjZXNzKTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBO
YQogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmVzdWx0
ID0gdXN0cmluZ1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBy
ZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgfQogCiAgICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFN0cmluZyB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3QKIHsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAg
IHJldHVybiB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKIH0KIAogSlNWYWx1ZSBqc0RhdGVPck51bGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFs
dWUpCkBAIC0xNTEsMTAgKzE1MSwxMCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRp
b24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2Vw
dGlvbi50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlv
bi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9i
amVjdCA9IGV4Y2VwdGlvbi50b09iamVjdChleGVjKTsKICAgICBpbnQgbGluZU51bWJlciA9IGV4
Y2VwdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSkudG9JbnQz
MihleGVjKTsKLSAgICBVU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIGlmIChFeGNlcHRp
b25CYXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2VwdGlvbikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE1ICs2MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRE9NRm9ybURhCiBKU1ZhbHVlIEpTRE9NRm9y
bURhdGE6OmFwcGVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgICAg
ICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkgewogICAgICAgICAgICAgU3Ry
aW5nIGZpbGVuYW1lOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAz
ICYmICFleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
ICAgIGZpbGVuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAg
aW1wbCgpLT5hcHBlbmQobmFtZSwgdG9CbG9iKHZhbHVlKSwgZmlsZW5hbWUpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwg
dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAg
IH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6
OmRlbGV0ZVByb3BlcnR5KEpTQ2UKIAogYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFs
dWUgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSoKICAgICB9CiAjZW5kaWYKIAotICAgIFVTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01MTIsNyArNTEyLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6b3BlbihFeGVjU3RhdGUqIGV4ZQogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVm
aW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwpAQCAt
Njc5LDcgKzY3OSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoRXgK
ICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSks
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBA
IC02OTMsNyArNjkzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWlj
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBs
KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSku
Z2V0KCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2
aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIEpTVmFsdWUgSlNEZXZpY2VN
b3Rpb25FdmVudDo6aW50ZXJ2YWwoRXgKIAogSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojpp
bml0RGV2aWNlTW90aW9uRXZlbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSk7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgYm9vbCBidWJibGVzID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZl
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphYnNvbHUK
IAogSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZpY2VPcmllbnRhdGlv
bkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0
IFN0cmluZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgLy8gSWYgYWxwaGEsIGJldGEgb3IgZ2FtbWEgYXJl
IG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFs
dWUoRXhlY1N0YXQKIAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgcmVzdWx0ID0gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBTY3JpcHRWYWx1ZSYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiAK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc3RyID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBG
cmFtZSogbGV4aWNhbEZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHQKICAgICAgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9y
ZVJlc3VsdCh1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAobV9pc0F0dHJpYnV0ZSkg
ewogICAgICAgICAgICAgICAgIGlmIChyZXR2YWwuaXNGYWxzZSgpKQogICAgICAgICAgICAgICAg
ICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5k
ZXg+KSBldGMuCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKHN0cmluZywgb2spOwogICAgICAg
ICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywg
anNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aXRlbShpbmRleCkpKTsK
QEAgLTgzLDggKzgzLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bAogCiAgICAgLy8gVGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBp
dGVtIHdlIHdhbnQKICAgICBib29sIG9rOwotICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBJZGVudGlmaWVy
Ojp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgb2spOworICAgIFVT
dHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIHVuc2lnbmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKSB7
CiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtV2l0aEluZGV4
KHVzdHJpbmdUb0F0b21pY1N0cmluZyhzdHJpbmcpLCBpbmRleCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3Qo
KSwgbm9kZSkpOwpAQCAtMTEzLDE1ICsxMTMsMTUgQEAgSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0
aW9uOjpuYW1lR2V0dGVyKAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRp
Zmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAg
ICB1aW50MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykKICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShpbmRleCkpOwot
ICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMo
ZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2Fz
dDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgY29udGV4
dElkID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmlu
ZyYgY29udGV4dElkID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5B
QkxFKFdFQkdMKQogICAgIGlmIChjb250ZXh0SWQgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwg
Y29udGV4dElkID09ICJ3ZWJraXQtM2QiKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE1ICs3MiwxNSBAQCBKU1ZhbHVlIEpTSFRNTENv
bGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlCiBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0o
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGJvb2wgb2s7Ci0gICAgdWludDMyX3QgaW5kZXggPSBJ
ZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgb2sp
OworICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKQogICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLT5pdGVtKGluZGV4
KSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVj
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlv
bjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmll
cihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsK
IH0KIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwxNCArMTM2LDE0IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGEKIAogICAgIHNpemVfdCBzaXplID0gZXhl
Yy0+YXJndW1lbnRDb3VudCgpOwogCi0gICAgVVN0cmluZyBmaXJzdFN0cmluZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgU2VnbWVudGVk
U3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhmaXJzdFN0cmluZyk7CiAg
ICAgaWYgKHNpemUgIT0gMSkgewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICBzZWdt
ZW50ZWRTdHJpbmcuY2xlYXIoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3Vi
c2VxdWVudFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBzZWdtZW50ZWRTdHJp
bmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc3Vic2VxdWVudFN0cmlu
ZykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSlNI
VE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXIKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlucHV0LT5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgaW5wdXQtPnNldFNlbGVjdGlvbkRpcmVjdGlvbih1c3Ry
aW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpT
VmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb24KIAogICAgIGludCBzdGFydCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7
CiAgICAgaW50IGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgU3Ry
aW5nIGRpcmVjdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIGRpcmVjdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgaW5wdXQtPnNl
dFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIEpTVmFsdWUgSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb24KICAgICAgICAgaWYgKCF0eXBlLmlzU3RyaW5n
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgdHlwZVN0cmluZyA9
IHVzdHJpbmdUb1N0cmluZyh0eXBlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIHR5
cGVTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcodHlwZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICAgICBpZiAodHlwZVN0cmluZyA9PSAic2VwYXJhdG9yIikgewogICAgICAgICAg
ICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbUN1
c3RvbVRhZ05vQWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvbnRleHRN
ZW51QWN0aW9uIHR5cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oQ29udGV4
dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAg
Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSA9IG5ldyBDb250ZXh0TWVudUl0ZW0oKHR5cGVTdHJp
bmcgPT0gImNoZWNrYm94IiA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlKSwgdHlw
ZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0qIG1lbnVJdGVtID0gbmV3IENvbnRleHRNZW51SXRlbSgodHlwZVN0
cmluZyA9PSAiY2hlY2tib3giID8gQ2hlY2thYmxlQWN0aW9uVHlwZSA6IEFjdGlvblR5cGUpLCB0
eXBlZElkLCB1c3RyaW5nVG9TdHJpbmcobGFiZWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KSk7CiAgICAgICAgICAgICBpZiAoIWVuYWJsZWQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
ICAgICBtZW51SXRlbS0+c2V0RW5hYmxlZChlbmFibGVkLnRvQm9vbGVhbihleGVjKSk7CiAgICAg
ICAgICAgICBpZiAoIWNoZWNrZWQuaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS0+ZXZh
bHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBleGNl
cHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBl
eGNlcHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5
LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpkZWZpbmVHZXR0ZXIoSlNPYmplY3QqIAogCiB2b2lkIEpT
TG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFVTdHJpbmcgaHJlZiA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaHJlZiA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhyZWYodXN0cmluZ1Rv
U3RyaW5nKGhyZWYpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMp
KTsKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRl
KiBleGVjCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcHJvdG9jb2wgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhvc3QgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGhvc3QgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyhob3N0KSwgYWN0
aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMDUsNyArMjA1
LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpT
TG9jYXRpb246OnNldEhvc3RuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBVU3RyaW5nIGhvc3RuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBob3N0bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhv
c3RuYW1lKHVzdHJpbmdUb1N0cmluZyhob3N0bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSlNMb2NhdGlv
bjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBvcnQgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBvcnQgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbCgpLT5zZXRQb3J0KHVzdHJpbmdUb1N0cmluZyhwb3J0KSwgYWN0aXZl
RE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMjEsNyArMjIxLDcg
QEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpTTG9j
YXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBw
YXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldFBhdGhu
YW1lKHVzdHJpbmdUb1N0cmluZyhwYXRobmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmly
c3RET01XaW5kb3coZXhlYykpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6
c2V0UGF0aG5hbWUoRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0U2VhcmNoKHVzdHJpbmdUb1N0cmluZyhwYXRo
bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAt
MjM3LDcgKzIzNyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXgK
IAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBVU3RyaW5nIGhhc2ggPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3Ry
aW5nIGhhc2ggPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIYXNo
KHVzdHJpbmdUb1N0cmluZyhoYXNoKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNo
KEV4ZWNTdGF0ZSogZXhlYwogCiBKU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlcGxhY2UodXN0
cmluZ1RvU3RyaW5nKHVybFN0cmluZyksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01X
aW5kb3coZXhlYykpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVs
b2FkKEV4ZWNTdGF0ZSogZXgKIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPmFzc2lnbih1c3Ry
aW5nVG9TdHJpbmcodXJsU3RyaW5nKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMiwxMSArMTAyLDExIEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEV4ZWNT
dGF0ZSoKIAogc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KEpTTWVz
c2FnZUV2ZW50KiBqc0V2ZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBV
U3RyaW5nJiB0eXBlQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
Y29uc3QgVVN0cmluZyYgdHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGVBcmcgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhl
Yy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgbGFzdEV2
ZW50SWRBcmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBV
U3RyaW5nJiBvcmlnaW5BcmcgPSBleGVjLT5hcmd1bWVudCg0KS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgbGFzdEV2ZW50SWRBcmcgPSBleGVjLT5hcmd1
bWVudCg1KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgRE9NV2luZG93KiBzb3Vy
Y2VBcmcgPSB0b0RPTVdpbmRvdyhleGVjLT5hcmd1bWVudCg2KSk7CiAgICAgT3duUHRyPE1lc3Nh
Z2VQb3J0QXJyYXk+IG1lc3NhZ2VQb3J0czsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDcpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246
OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkBAIC04MSw3ICs4MSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGUKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rp
b25TeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25T
eW5jOjpleGVjdXRlU3FsCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkBAIC04MCw3ICs4MCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1
dGVTcWwKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2Vy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1No
YXJlZFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMTAgKzYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNTaGFyZWRXb3IK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRz
IikpOwogCi0gICAgVVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBVU3RyaW5nIG5hbWU7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDEpCi0gICAgICAgIG5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50
b1N0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGUKICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEV4dGUKICAgICAgICAgcmV0dXJuIHRocm93U3ludGF4RXJyb3IoZXhlYyk7CiAKICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpOwotICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgU3RyaW5n
JiBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9uKG5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJT
b2NrZXQKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKSk7CiAKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJ3cm9uZyBVUkwiKSk7CiAgICAg
UmVmUHRyPFdlYlNvY2tldD4gd2ViU29ja2V0ID0gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7
CkBAIC03MywxNCArNzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNv
Y2tldAogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAg
SlNBcnJheSogcHJvdG9jb2xzQXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmlu
Zyhwcm90b2NvbHNBcnJheS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNBcnJheS0+
Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBw
ZW5kKHByb3RvY29sKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29u
bmVjdCh1cmxTdHJpbmcsIHByb3RvY29scywgZWMpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKHByb3RvY29sc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0
cmluZyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVj
dCh1cmxTdHJpbmcsIHByb3RvY29sLCBlYyk7CkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1ZSBK
U1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZQogICAgIGVsc2UgaWYgKG1lc3NhZ2UuaW5o
ZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHRv
QmxvYihtZXNzYWdlKSwgZWMpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgc3RyaW5nTWVz
c2FnZSA9IHVzdHJpbmdUb1N0cmluZyhtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAg
U3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmcobWVzc2FnZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgcmVzdWx0ID0gaW1wbCgp
LT5zZW5kKHN0cmluZ01lc3NhZ2UsIGVjKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBKU1ZhbHVlIEpT
V2ViU29ja2V0OjpjbG9zZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICB4ID0gY2xhbXBUbyh4
LCBtaW5WYWx1ZSwgbWF4VmFsdWUpOwogICAgICAgICBjb2RlID0gY2xhbXBUb0ludGVnZXIoeCk7
CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgICAgIHJlYXNvbiA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICByZWFzb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewogICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJS
KTsKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIEpTVmFs
dWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEUKIAogICAgIFZlY3RvcjxTdHJpbmc+
IHVybHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgaSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudChpKS50b1N0cmluZyhleGVjKSkpOworICAgICAgICB1cmxzLmFwcGVuZCh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uCiAgICAgaWYgKCFl
eGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVT
dHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOCArODUsOCBAQCBKU1ZhbHVlIEpTWE1MSHR0
cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4
ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIGNvbnN0IEtVUkwmIHVybCA9IGlt
cGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb21wbGV0ZVVSTCh1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBTdHJpbmcgbWV0aG9k
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29t
cGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOworICAgIFN0cmluZyBtZXRob2QgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewpA
QCAtMTI5LDcgKzEyOSw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3Rh
dGUKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8p
KQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFsKSwgZWMpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBpbXBsKCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50
b1N0cmluZyhleGVjKSksIGVjKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh1c3RyaW5nVG9T
dHJpbmcodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGVjKTsKICAgICB9CiAKICAg
ICBpbnQgc2lnbmVkTGluZU51bWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksOSArODksOSBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6
c2V0UGFyYW1ldGVyKEV4CiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcg
bmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1l
c3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3Ry
aW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaW1wbCgpLT5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTEw
MCw4ICsxMDAsOCBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4CiB7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBs
b2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhl
YykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxO
YW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CiAgICAgU3RyaW5nIHZhbHVlID0gaW1wbCgpLT5nZXRQYXJhbWV0ZXIobmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKGV4
ZWMsIHZhbHVlKTsKIH0KQEAgLTExMCw4ICsxMTAsOCBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nv
cjo6cmVtb3ZlUGFyYW1ldGVyCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBu
YW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaW1wbCgpLT5yZW1vdmVQYXJh
bWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NP
d25QdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3QKICAgICBpZiAoZ2V0Q2FsbERhdGEo
diwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICBpZiAocG9saWN5ICYmICFw
b2xpY3ktPmFsbG93RXZhbCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHJp
bmcgPSB2LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2NoZWR1bGVkQWN0aW9uKHVzdHJpbmdUb1N0cmluZyhzdHJpbmcpLCBp
c29sYXRlZFdvcmxkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRF
dmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw3ICsxMDMsOCBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3Vt
ZW50CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rp
b24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwot
ICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3Rh
dGVGcm9tTm9kZShqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCksIGRvY3VtZW50KSkpOworICAg
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbU5vZGUoanNMaXN0ZW5l
ci0+aXNvbGF0ZWRXb3JsZCgpLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmlu
Zyhqc0Z1bmN0aW9uLT50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKSk7
CiB9CiAKIGJvb2wgZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWVudCogZG9jdW1l
bnQsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIFN0cmluZyYgc291cmNlTmFtZSwgaW50
JiBsaW5lTnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIAogU3RyaW5nIFNjcmlwdFZhbHVlOjp0
b1N0cmluZyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJl
c3VsdCA9IHVzdHJpbmdUb1N0cmluZyhtX3ZhbHVlLmdldCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRl
KSk7CisgICAgU3RyaW5nIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyhtX3ZhbHVlLmdldCgpLnRv
U3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpKTsKICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9raW5n
IHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCiAgICAgaWYgKHNjcmlwdFN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgc2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBFTkQKICAg
ICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5l
ci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRv
bWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1
cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50
b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIo
dXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
JHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQdHJIYW5k
bGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogRU5ECiAgICAgcmV0dXJuIEBHZW5lcmF0ZUV2
ZW50TGlzdGVuZXJJbXBsOwpAQCAtMjkxMiw3ICsyOTEyLDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2
ZQogICAgIGlmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICByZXR1cm4gInZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9IHx8ICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CiAgICAgICAgIHJldHVybiAidmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkc2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0
cmluZyJ9OwotICAgICAgICByZXR1cm4gInVzdHJpbmdUb1N0cmluZygkdmFsdWUuaXNFbXB0eSgp
ID8gVVN0cmluZygpIDogJHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSI7CisgICAgICAgIHJldHVybiAi
dXN0cmluZ1RvU3RyaW5nKCR2YWx1ZS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiAkdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJE
T01PYmplY3QiKSB7CkBAIC0zNDkyLDcgKzM0OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7Y29uc3RydWN0CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwog
Ci0gICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlw
ZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS90ZXN0YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyAr
MzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBjaGFyICptc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS5hc2NpaSgpOworICAgICAg
ICAgICAgICAgICAgICBjaGFyKiBtc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykuYXNjaWkoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IC0xOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhWYWwudHlwZSgpID09IE9iamVjdFR5cGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlIGxpbmVWYWwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFs
KS5nZXQoZXhlYyxJZGVudGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3Rlc3RxdGJpbmRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvdGVzdHF0YmluZGluZ3MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvdGVzdHF0YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgaWYgKGNv
bXAuY29tcGxUeXBlKCkgPT0gVGhyb3cpIHsKICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAi
ZXhjZXB0aW9uIHRocm93biI7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSogZXhWYWwgPSBjb21w
LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5nKGV4
ZWMpLmFzY2lpKCk7CisgICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8g
PSAtMTsKICAgICAgICAgICAgICAgICBpZiAoZXhWYWwtPnR5cGUoKSA9PSBPYmplY3RUeXBlKSB7
CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUqIGxpbmVWYWwgPSBleFZhbC0+Z2V0T2JqZWN0
KCktPmdldChleGVjLCBJZGVudGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICBWT0lEX1RPX05QVkFS
SUFOVCgqcmVzdWx0KTsKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFVT
dHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHVz
dHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIENTdHJp
bmcgY3N0cmluZyA9IHVzdHJpbmcudXRmOCgpOwogICAgICAgICBOUFN0cmluZyBzdHJpbmcgPSB7
IChjb25zdCBOUFVURjgqKWNzdHJpbmcuZGF0YSgpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3N0
cmluZy5sZW5ndGgoKSkgfTsKICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmlu
Z0NvcHkocmVzdWx0LCAmc3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg4LDcgKzQ4OCw3IEBA
IGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICAgICAgICAgIHJl
c3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRv
dWJsZSl2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigp
OwogICAgICAgICByZXN1bHQgPSBlbnYtPk5ld1N0cmluZyAoKGNvbnN0IGpjaGFyICopc3RyaW5n
VmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAgfSBlbHNlIGlm
ICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXYKICAgICAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmlu
ZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0u
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBlbnYtPlNl
dE9iamVjdEFycmF5RWxlbWVudChqYXJyYXksIGksCiAgICAgICAgICAgICAgICAgICAgICAgICBl
bnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUu
Y2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0ph
dgogICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShs
ZW5ndGgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4
ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCgpID4gMCkKICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSAoKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCkp
WzBdOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVj
U3RhdGUqIGUKICAgICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIG51bGwuCiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5T
dHJpbmciKSkgewogICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOwogICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBl
bnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5j
aGFyYWN0ZXJzKCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmwgPSBqYXZhU3RyaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YUZpZWxkSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhRmllbGRKU0MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgZGlz
cGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0
YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25E
ZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24u
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgSlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKEV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBMT0coTGl2ZUNvbm5lY3Qs
ICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmco
bmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNj
aWkoKS5kYXRhKCkpOworICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6dmFsdWVGcm9t
SW5zdGFuY2UgZ2V0dGluZyAlcyA9ICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCku
ZGF0YSgpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRh
KCkpOwogCiAgICAgcmV0dXJuIGpzcmVzdWx0OwogfQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQg
SmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW4KICAgICAgICAgICAgICAgICBhcmdz
WzFdID0gamF2YVZhbHVlOwogICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCBy
b290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCBKYXZhVHlw
ZVZvaWQsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xODMsNyAr
MTgzLDcgQEAgdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGNv
bnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFu
Y2UqPihpKTsKICAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhl
YywgaS0+cm9vdE9iamVjdCgpLCBhVmFsdWUsIG1fdHlwZSwgdHlwZUNsYXNzTmFtZSgpKTsKIAot
ICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNldHRp
bmcgdmFsdWUgJXMgdG8gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCks
IGFWYWx1ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgTE9HKExpdmVDb25u
ZWN0LCAiSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAl
cyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgSmF2YVR5cGVBcnJheToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1MKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAg
ICBDU3RyaW5nIGphdmFDbGFzc05hbWUgPSBqTWV0aG9kLT5wYXJhbWV0ZXJBdChpKS51dGY4KCk7
CiAgICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgbV9yb290T2Jq
ZWN0LmdldCgpLCBleGVjLT5hcmd1bWVudChpKSwgamF2YVR5cGVGcm9tQ2xhc3NOYW1lKGphdmFD
bGFzc05hbWUuZGF0YSgpKSwgamF2YUNsYXNzTmFtZS5kYXRhKCkpOwotICAgICAgICBMT0coTGl2
ZUNvbm5lY3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBl
eGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IExPRyhMaXZlQ29ubmVjdCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAl
cyIsIGksIGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAganZhbHVlIHJlc3VsdDsKQEAgLTIxNCw3ICsyMTQs
NyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAgICAgICAgIGpt
ZXRob2RJRCBtZXRob2RJZCA9IGdldE1ldGhvZElEKG9iaiwgak1ldGhvZC0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCksIGpNZXRob2QtPnNpZ25hdHVyZSgpKTsKICAgICAgICAgaGFuZGxlZCA9IGRpc3Bh
dGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9k
LT5pc1N0YXRpYygpLCBqTWV0aG9kLT5yZXR1cm5UeXBlKCksIG1ldGhvZElkLCBqQXJncy5kYXRh
KCksIHJlc3VsdCwgY2FsbGluZ1VSTCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICBp
ZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpKTsK
KyAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9u
RGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDcg
KzM0Myw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2OwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKHN0
ci5sZW5ndGgoKSA/ICooY29uc3QgdXNob3J0KilzdHIuaW1wbCgpLT5jaGFyYWN0ZXJzKCkgOiAw
KSk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMzsKQEAgLTM1OCw3ICszNTgsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0
IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMDsKQEAgLTQzOSw3ICs0MzksNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExl
bmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFy
cmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0
cmluZyA9IHZhbC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1w
bCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CkBAIC00NTMsNyArNDUzLDcgQEAgUVZhcmlhbnQg
Y29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIGludCBsZW4g
PSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQo
ZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBx
c3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocXN0cmluZyk7CkBAIC00NjIsNyArNDYyLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9R
VmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUg
bGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1
c3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKQEAgLTQ3OCw3ICs0NzgsNyBA
QCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQoUUJ5dGVBcnJheShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihhcnItPmRhdGEoKSksIGFyci0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICBkaXN0ID0g
MDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFj
dGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKS50b0xhdGluMSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwpAQCAtNTIx
LDcgKzUyMSw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAg
ICAgICAgICAgICAgICB9CiAjaWZuZGVmIFFUX05PX0RBVEVTVFJJTkcKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJp
bmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJp
bmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAg
UVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5j
aGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGhp
bnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKQEAgLTU3MSw3ICs1NzEsNyBAQCBRVmFyaWFu
dCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgUmVnRXhw
T2JqZWN0ICpyZSA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KG9iamVjdCk7CiAqLwogICAg
ICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gY29udmVydC4uIGEgYml0IHJpc2t5Ci0gICAgICAg
ICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
ICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFD
aGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAog
ICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgb2YgdGhlIGZvcm0gJy94eHh4eHgvaScKQEAgLTU5
MSw3ICs1OTEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAg
ICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyBy
ZWdleHAiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5n
ID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVz
dHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsK
QEAgLTE1OTksNyArMTU5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc09iajsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgaXQgdG8gYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgZnVuY05h
bWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVTdHJpbmcgZnVuY05hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJ
ZGVudChleGVjLCBmdW5jTmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBE
cm9wQWxsTG9ja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHND
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRl
cm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCB2b2lkIEpTSW50ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhCiAgICAgVmVjdG9y
PFN0cmluZz4gbGFuZ3VhZ2VzOwogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgo
aSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB1c3RyaW5nVG9T
dHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgICAgIGxhbmd1YWdlcy5hcHBlbmQobGFuZ3VhZ2UpOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQg
cmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxs
IHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZy
b20gIkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2lu
Y2UKKyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1Zh
bHVlVG9OUFZhcmlhbnQpOgorCiAyMDEyLTAxLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFdlYktpdDIgcmVtZW1iZXIgdGhlIGhlaWdodCBv
ZiB0aGUgV2ViIEluc3BlY3RvciB3aGVuIGl0IGlzIGRvY2tlZC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpj
b252ZXJ0SlNWYWx1ZVQKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICBOUFN0cmluZyBucFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLnV0ZjgoKSk7CisgICAgICAgIE5QU3RyaW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKSk7CiAgICAgICAgIFNUUklO
R05fVE9fTlBWQVJJQU5UKG5wU3RyaW5nLlVURjhDaGFyYWN0ZXJzLCBucFN0cmluZy5VVEY4TGVu
Z3RoLCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQg
cmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxs
IHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZy
b20gIkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2lu
Y2UKKyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4K
KworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1
ZVRvQXJyYXkpOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJH
ZXN0dXJlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdEZyb21TdHJpbmc6d2l0aEdsb2JhbE9iamVjdDppblNjcmlwdFdvcmxkOl0pOgorCiAyMDEy
LTAxLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBXZWJD
b3JlIFJ1bkxvb3Agd29yayBmb3IgV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjU4LDcgKzEyNTgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFs
CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlwZV1dOwotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSldOworICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OnVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpXTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpEb3VibGVWYWx1
ZVR5cGVdXTsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTp2YWx1ZS50b051bWJlcihleGVjKV1dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEzLDggQEAgLSAoTlNT
dHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgICAgICByZXR1cm4gQCIiOwog
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwor
ICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiB9CiAKIC0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgUG9zaXRp
b24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQpAQCAtMTE5MSw3
ICsxMTkyLDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAg
ICAgICByZXR1cm4gQCIiOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhhbnlXb3JsZEds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBh
bnlXb3JsZEdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIHJldHVybiB1c3RyaW5nVG9T
dHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIC0gKEpTR2xv
YmFsQ29udGV4dFJlZilfZ2xvYmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3Js
ZCAqKXdvcmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MDQs
NyArMjYwNCw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAg
ICAgICAgcmV0dXJuIFNfT0s7CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwotICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRv
U3RyaW5nKGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpKTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAg
U3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0
U3RyaW5nKS5yZWxlYXNlKCk7CiAKICAgICByZXR1cm4gU19PSzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123695</attachid>
            <date>2012-01-23 21:26:29 -0800</date>
            <delta_ts>2012-01-24 13:06:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120123212628.patch</filename>
            <type>text/plain</type>
            <size>151079</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMS0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFk
IG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvbW1vbiBjYXNlIC0tIHRvU3RyaW5nKCkgb24g
YSBzdHJpbmcgLS0gZmFzdGVyIGFuZAorICAgICAgICBpbmxpbmUtYWJsZS4gKE5vdCBhIG1lYXN1
cmVhYmxlIHNwZWVkdXAsIGJ1dCB3ZSBjYW4gbm93IHJlbW92ZSBhIGJ1bmNoCisgICAgICAgIG9m
IGR1cGxpY2F0ZSBoYW5kLXJvbGxlZCBjb2RlIGZvciB0aGlzIG9wdGltaXphdGlvbi4pCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuICJD
Kysgc3RyaW5ncyIgYW5kICJKUyBzdHJpbmdzIi4KKyAgICAgICAgCisgICAgICAgIEluIGFsbCBj
YXNlcyBvdGhlciB0aGFuIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsIGFuZCBtdWx0aS1k
aWdpdAorICAgICAgICBudW1iZXJzLCB0aGUgSlMgcnVudGltZSB3YXMganVzdCByZXRyaWV2aW5n
IGEgVVN0cmluZyBmcm9tIGEgSlNTdHJpbmcsCisgICAgICAgIHNvIHJldHVybmluZyBhIEpTU3Ry
aW5nKiBpcyBzdHJpY3RseSBiZXR0ZXIuIEluIHRoZSBvdGhlciBjYXNlcywgd2UgY2FuCisgICAg
ICAgIG9wdGltaXplIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IEpTU3RyaW5nIGlmIHdlIGNhcmUg
dG8sIGJ1dCBpdCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gYmUgYSBiaWcgZGVhbC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IQorICAgICAgICAKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25QcmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVn
KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU291cmNlU3RyaW5nKTogQ2FsbCB2YWx1ZSgp
IGFmdGVyIGNhbGxpbmcgdG9TdHJpbmcoKSwgdG8KKyAgICAgICAgY29udmVydCBmcm9tICJKUyBz
dHJpbmciIChKU1N0cmluZyopIHRvICJDKysgc3RyaW5nIiAoVVN0cmluZyksIHNpbmNlCisgICAg
ICAgIHRvU3RyaW5nKCkgbm8gbG9uZ2VyIHJldHVybnMgYSAiQysrIHN0cmluZyIuCisKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChvcF9hZGQpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIHRvUHJpbWl0aXZlU3RyaW5nKCk6Cisg
ICAgICAgIGFsbCAnKycgb3BlcmFuZHMgY2FuIHVzZSB0b1N0cmluZygpLCBleGNlcHQgZm9yIG9i
amVjdCBvcGVyYW5kcywgd2hpY2gKKyAgICAgICAgbmVlZCB0byB0YWtlIGEgc2xvdyBwYXRoIHRv
IGNhbGwgdG9QcmltaXRpdmUoKS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1Bh
dGhzOjpvcEluKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6IENhbGwgdmFsdWUoKSBhZnRlciBj
YWxsaW5nIHRvU3RyaW5nKCksIGFzIGFib3ZlLgorCisgICAgICAgICogcnVudGltZS9FcnJvcklu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6IFNpbXBsaWZp
ZWQgZG93biB0byBvbmUgY2Fub25pY2FsIGNyZWF0ZSgpCisgICAgICAgIGZ1bmN0aW9uLCB0byBt
YWtlIHN0cmluZyBoYW5kbGluZyBlYXNpZXIuCisKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOiBDYWxsIHZh
bHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOiBSZW1vdmVkIEpT
Q2VsbDo6dG9TdHJpbmcoKSBiZWNhdXNlIEpTVmFsdWUgZG9lcyB0aGlzCisgICAgICAgIGpvYiBu
b3cuIERvaW5nIGl0IGluIEpTQ2VsbCBpcyBzbG93ZXIgKHJlcXVpcmVzIGV4dHJhIHR5cGUgY2hl
Y2tpbmcpLCBhbmQKKyAgICAgICAgY3JlYXRlcyB0aGUgbWlzaW1wcmVzc2lvbiB0aGF0IGxhbmd1
YWdlLWRlZmluZWQgdG9TdHJpbmcoKSBiZWhhdmlvciBpcworICAgICAgICBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgSlNDZWxsLgorICAgICAgICAKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVW5lc2NhcGUpOiBDYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygp
LCBhcyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKTogUmVtb3Zl
ZCBzb21lIG1hbnVhbCBvcHRpbWl6YXRpb24gdGhhdCB0b1N0cmluZygpCisgICAgICAgIHRha2Vz
IGNhcmUgb2YuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6IFVw
ZGF0ZWQgdG8gcmV0dXJuIEpTU3RyaW5nKi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcpOiBSZW1vdmVkLCBzaW5jZSBJIHJlbW92ZWQgSlNDZWxsOjp0b1N0cmluZygp
LgorCisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmdTbG93Q2FzZSk6IFJlbW92ZWQgdG9QcmltaXRpdmVTdHJpbmcoKSwgYW5kIHJl
LQorICAgICAgICBzcGF3bmVkIHRvU3RyaW5nU2xvd0Nhc2UoKSBmcm9tIGl0cyB6b21iaWUgY29y
cHNlLCBzaW5jZSB0b1ByaW1pdGl2ZVN0cmluZygpCisgICAgICAgIGJhc2ljYWxseSBkaWQgd2hh
dCB3ZSB3YW50IGFsbCB0aGUgdGltZS4gKE5vdGUgdGhhdCB0aGUgdG9QcmltaXRpdmUoKQorICAg
ICAgICBwcmVmZXJlbmNlIGNoYW5nZXMgZnJvbSBOb1ByZWZlcmVuY2UgdG8gUHJlZmVyU3RyaW5n
LCBiZWNhdXNlIHRoYXQncworICAgICAgICBob3cgVG9TdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUg
bGFuZ3VhZ2UuIG9wX2FkZCBkb2VzIG5vdCB3YW50IHRoaXMgYmVoYXZpb3IuKQorCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKTogQSBsaXR0bGUgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJpbmcoKQorICAgICAgICByZXR1
cm5zIGEgSlNTdHJpbmcqLgorCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBh
cyBhYm92ZS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmpzQWRkU2xvd0Nhc2UpOiBOZWVkIHRvIGNoZWNrIGZvciBvYmplY3QgYmVmb3JlIHRha2lu
ZyB0aGUgdG9TdHJpbmcoKQorICAgICAgICBmYXN0IHBhdGggYmVjdWFzZSBhZGRpbmcgYW4gb2Jq
ZWN0IHRvIGEgc3RyaW5nIHJlcXVpcmVzIGNhbGxpbmcgdG9QcmltaXRpdmUoKQorICAgICAgICBv
biB0aGUgb2JqZWN0LCBub3QgdG9TdHJpbmcoKS4gKFRoZXkgZGlmZmVyIGluIHRoZWlyIHByZWZl
cnJlZCBjb252ZXJzaW9uCisgICAgICAgIHR5cGUuKQorCisgICAgICAgICogcnVudGltZS9PcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdGcm9tQXJndW1lbnRzKTogVGhpcyBjb2RlIGdldHMgc2ltcGxlciwgbm93IHRoYXQgdG9TdHJp
bmcoKQorICAgICAgICBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoSlNDOjpqc0Fk
ZCk6IE5vdyBjaGVja3MgZm9yIG9iamVjdCwganVzdCBsaWtlIGpzQWRkU2xvd0Nhc2UoKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhw
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKTogTW9yZSBjYWxscyB0byB2YWx1ZSgpLCBhcyBhYm92
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
U3RyaW5nQ29uc3RydWN0b3IpOiBUaGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0
cmluZygpCisgICAgICAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0
SW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQmlnKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JvbGQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKTogU29tZSBvZiB0
aGlzIGNvZGUgZ2V0cyBzaW1wbGVyLCBub3cgdGhhdCB0b1N0cmluZygpCisgICAgICAgIGRvZXMg
dGhlIHJpZ2h0IHRoaW5nLiBNb3JlIGNhbGxzIHRvIHZhbHVlKCksIGFzIGFib3ZlLgorCiAyMDEy
LTAxLTIzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtNTY2LDEzICs1NjYsMTMgQEAgX19aTkszSlNDMTlTb3VyY2VQcm92aWRlckNhY2hl
OGJ5dGVTaXplRQogX19aTkszSlNDNkpTQ2VsbDExdG9QcmltaXRpdmVFUE5TXzlFeGVjU3RhdGVF
TlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBlRQogX19aTkszSlNDNkpTQ2VsbDh0b051bWJlckVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOSzNKU0M2SlNDZWxsOHRvU3RyaW5nRVBOU185RXhl
Y1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0M2SlNDZWxsOWdldFN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVSTlNfN1VTdHJpbmdFCiBfX1pO
SzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTQXJyYXkxMnN1YmNsYXNz
RGF0YUV2CiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9OdW1iZXJTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0
ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMTZ0b09iamVjdFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRVBO
U18xNEpTR2xvYmFsT2JqZWN0RQorX19aTkszSlNDN0pTVmFsdWUxNnRvU3RyaW5nU2xvd0Nhc2VF
UE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3SlNWYWx1ZTE5c3ludGhlc2l6ZVByb3RvdHlwZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlMjB0b1RoaXNPYmplY3RTbG93Q2FzZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGF0
ZUUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmkKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBwdXRjaGFyKCcgJyk7CiAKLSAgICAgICAgcHJpbnRmKCIlcyIsIGV4ZWMt
PmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwcmlu
dGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHB1dGNoYXIoJ1xuJyk7CkBAIC0yNDgsNyArMjQ4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzXG4iLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS51dGY4KCkuZGF0YSgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xuIiwg
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTI3Nyw3ICsyNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVy
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYg
KCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBm
aWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxl
LiIpKSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIFZlY3RvcjxjaGFy
PiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1l
LCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKQEAgLTQ4Nyw5
ICs0ODcsOSBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICBp
ZiAoZHVtcCkgewogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24u
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcHJp
bnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIGdsb2JhbERhdGEuc3RvcFNhbXBsaW5nKCk7CkBAIC01
NDYsOSArNTQ2LDkgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0Kgog
ICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBqc2NTb3VyY2UobGlu
ZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRp
b24pOwogI2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAg
ICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5n
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNyAr
MjkzLDcgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAogCiAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCi0gICAgUmVmUHRyPE9w
YXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3Bh
cXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9u
KQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZGVmCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDEwICszMzksMTAgQEAgRVhQT1JUUwogICAgID90b051bWJlclNs
b3dDYXNlQEpTVmFsdWVASlNDQEBBQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9PYmplY3RA
SlNDZWxsQEpTQ0BAUUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0dsb2JhbE9i
amVjdEAyQEBaCiAgICAgP3RvT2JqZWN0U2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRVBBVkpTT2Jq
ZWN0QDJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgotICAgID90b1N0cmlu
Z0BKU0NlbGxASlNDQEBRQkU/QVZVU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/dG9T
dHJpbmdASlNPYmplY3RASlNDQEBRQkU/QVZVU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJAQFoKKyAg
ICA/dG9TdHJpbmdASlNPYmplY3RASlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvU3RyaW5nRGVjaW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoK
ICAgICA/dG9TdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoK
KyAgICA/dG9TdHJpbmdTbG93Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNTdHJpbmdAMkBQQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b1RoaXNPYmplY3RASlNPYmplY3RASlNDQEBTQVBBVjEyQFBB
VkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvVGhpc09iamVjdFNsb3dDYXNlQEpT
VmFsdWVASlNDQEBBQkVQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvVUlu
dDMyQElkZW50aWZpZXJASlNDQEBTQUlBQlZVU3RyaW5nQDJAQUFfTkBaCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0
cmluZyhFeGVjUwogICAgICAgICByZXR1cm4gIjAiOwogCiAgICAgaWYgKHZhbC5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNjYXBlUXVvdGVzKHZhbC50b1N0
cmluZyhleGVjKSksICJcIiIpOworICAgICAgICByZXR1cm4gbWFrZVVTdHJpbmcoIlwiIiwgZXNj
YXBlUXVvdGVzKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCAiXCIiKTsKIAogICAg
IHJldHVybiB2YWwuZGVzY3JpcHRpb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3
LDcgKzE5Nyw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiAKICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAg
Ly8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9u
LgotICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOwor
ICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2VwdGlvbikgewogICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChzdHJpY3QpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlk
ZW50LCB2YWx1ZSwgc2xvdCk7CkBAIC0yNTksMTEgKzI1OSw4IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICAKICAgICBBU1NFUlQoIW9wMS5pc051bWJlcigp
IHx8ICFvcDIuaXNOdW1iZXIoKSk7CiAgICAgCi0gICAgaWYgKG9wMS5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIGlmIChvcDIuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcob3AxKSwgYXNTdHJpbmcob3AyKSkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSks
IG9wMi50b1ByaW1pdGl2ZVN0cmluZyhleGVjKSkpOwotICAgIH0KKyAgICBpZiAob3AxLmlzU3Ry
aW5nKCkgJiYgIW9wMi5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKG9wMSksIG9wMi50b1N0cmluZyhleGVjKSkpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZFNsb3dDYXNlKGV4ZWMsIG9wMSwgb3AyKSk7
CiB9CkBAIC0zMDYsNyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgICAgICB9CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpZGVudChleGVjLCBw
cm9wZXJ0eS50b1N0cmluZyhleGVjKSk7CisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBwcm9w
ZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCkBAIC0zMjYsNyArMzIzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIElkZW50aWZpZXIg
aWRlbnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgaWRl
bnQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGlkZW50KSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwMywxMCArMTMwMyw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIHYyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUo
KTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0g
ICAgaWYgKHYxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB2Mi5pc1N0
cmluZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCBh
c1N0cmluZyh2MikpCi0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmco
djEpLCB2Mi50b1ByaW1pdGl2ZVN0cmluZyhjYWxsRnJhbWUpKTsKKyAgICBpZiAodjEuaXNTdHJp
bmcoKSAmJiAhdjIuaXNPYmplY3QoKSkgeworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI0NjEsNyArMjQ1OSw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogICAgIH0KICAgICAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIg
cHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUo
Y2FsbEZyYW1lKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFt
ZSwgcHJvcGVydHkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMjQ4OCw3ICsyNDg2LDcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVS
Tl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNj
cmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShj
YWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUp
KTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsK
ICAgICB9CiAgICAgCkBAIC0yNTE4LDcgKzI1MTYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIGlmICghaXNKU0J5dGVBcnJheShiYXNlVmFsdWUp
KQogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
dmFsKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJh
bWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHBy
b3BlcnR5KTsKICAgICB9CiAgICAgCkBAIC0yNTc5LDcgKzI1NzcsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
YmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxG
cmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0
LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICBpZiAoIXN0
YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmpl
Y3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAg
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7
CkBAIC0yNjIwLDcgKzI2MTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRf
YnlfdmFsCiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWwpKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vi
c2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFt
ZSkpOwogICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8v
IERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgog
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHBy
b3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0zMzg2LDcgKzMzODQsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgaWYgKHByb3BOYW1lLmdldFVJbnQzMihp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFz
UHJvcGVydHkoY2FsbEZyYW1lLCBpKSkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHByb3BOYW1lLnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgIElkZW50aWZpZXIgcHJv
cGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxs
RnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0
eSkpKTsKIH0KQEAgLTM0OTgsNyArMzQ5Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmosIGNhbGxGcmFtZSwgaSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJh
bWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwog
ICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShi
YXNlT2JqLCBjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAgICB9CkBAIC0zNTM5LDcgKzM1MzcsNyBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19yZWZlCiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgVVN0cmluZyBtZXNzYWdl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1
ZShjYWxsRnJhbWUpOwogICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENF
UFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw3ICsxOTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFVTdHJpbmcgc3RyID0gZWxlbWVudC50b1N0cmlu
ZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgc3RyQnVmZmVyW2tdID0gc3RyLmltcGwoKTsKICAgICAgICAg
dG90YWxTaXplICs9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgYWxsU3RyaW5nczhCaXQgPSBhbGxT
dHJpbmdzOEJpdCAmJiBzdHIuaXM4Qml0KCk7CkBAIC0yNzIsOSArMjcyLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZl
cnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENh
bGxUeXBlTm9uZSkKLSAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25G
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSku
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RyID0gY2FsbChleGVjLCBjb252ZXJz
aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0
KCkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAg
IHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAg
c3RyQnVmZmVyLmFwcGVuZChzdHIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjk3LDcgKzI5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIFVTdHJp
bmcgc2VwYXJhdG9yOwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgc2VwYXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIHNlcGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChpc0pTQXJyYXkodGhpc09i
aikpIHsKQEAgLTMwOCw3ICszMDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICAgICAgZ290byBza2lwRmlyc3RMb29wOwogICAgICAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgaWYg
KCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RyQnVmZmVy
LmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzdHJCdWZm
ZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
ICAgIGsrKzsKICAgICAgICAgfQogCkBAIC0zMTksNyArMzE5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBl
bmQoJywnKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhl
eGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewpAQCAtMzI4LDcgKzMyOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
ICAgICBzdHJCdWZmZXIuYXBwZW5kKHNlcGFyYXRvcik7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwogICAgICAgICAgICAgICAgIGlmICghZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBzdHJC
dWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM0Myw3ICszNDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0ckJ1ZmZlci5idWlsZChleGVjKSk7CkBAIC00MjksNyArNDI5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggKyBuLCBleGVjLT5hcmd1
bWVudChuKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9T
dHJpbmcoZXhlYykpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoZXhlYywg
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRf
dD4obikpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICB0aGlzT2Jq
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT5h
cmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIGJvb2wgb3BJbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdQogICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJl
dHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBpKTsKIAotICAgIElkZW50aWZpZXIgcHJv
cGVydHkoZXhlYywgcHJvcE5hbWUudG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgcHJv
cGVydHkoZXhlYywgcHJvcE5hbWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBDYWxsVHlw
ZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihwYXJzZURhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
Tm93KEV4ZWNTdGF0ZSopCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwx
MyArMTU0LDEzIEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAg
ICBib29sIHVzZUN1c3RvbUZvcm1hdCA9IGZhbHNlOwogICAgIFVTdHJpbmcgY3VzdG9tRm9ybWF0
U3RyaW5nOwogCi0gICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChhcmcwU3RyaW5nID09ICJjdXN0
b20iICYmICFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIHVzZUN1
c3RvbUZvcm1hdCA9IHRydWU7Ci0gICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBl
eGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgfSBlbHNl
IGlmIChmb3JtYXQgPT0gTG9jYWxlRGF0ZUFuZFRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkKCkpIHsKICAgICAgICAgZGF0ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFy
ZzBTdHJpbmcsIGRhdGVTdHlsZSk7Ci0gICAgICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0
cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgdGltZVN0eWxlKTsKKyAgICAg
ICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgdGltZVN0eWxlKTsKICAgICB9IGVsc2UgaWYgKGZvcm1h
dCAhPSBMb2NhbGVUaW1lICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0eWxl
KTsKICAgICBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlRGF0ZSAmJiAhZXhlYy0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQy
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgICAgICB9CisKICAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBFcnJvckluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEVycm9ySW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBVU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwg
bWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBhcHBlbmRTb3VyY2VU
b01lc3NhZ2UoKSB7IHJldHVybiBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogICAgIGlmIChuYW1lLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIG5hbWVTdHJpbmcgPSAiRXJyb3IiOwogICAgIGVsc2UgewotICAgICAgICBuYW1l
U3RyaW5nID0gbmFtZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KQEAgLTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGVycm9yUHJvdG9GCiAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbWVz
c2FnZVN0cmluZyA9ICIiOwogICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVz
c2FnZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcg
KzExMyw3IEBAIEpTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEUKICAgICAK
IEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIG9wLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0g
bWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKSwgIicgaXMgbm90IGEgdmFsaWQg
YXJndW1lbnQgZm9yICciLCBvcCwgIiciKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1h
a2VVU3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBu
b3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgJyIsIG9wLCAiJyIpOwogICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0
YW5jZSo+KGV4Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpAQCAtMTIyLDcg
KzEyMiw3IEBAIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3QKIAogSlNP
YmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5nKCInIiwg
dmFsdWUudG9TdHJpbmcoZXhlYyksICInIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7CisgICAgVVN0
cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSwgIicgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSk7CiAgICAgQVNT
RVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHN0YXRpY19jYXN0PEVycm9y
SW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKTsKQEAgLTEz
MSw3ICsxMzEsNyBAQCBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlCiAK
IEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIs
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgIFVTdHJp
bmcgZXJyb3JNZXNzYWdlID0gbWFrZVVTdHJpbmcoIiciLCB2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyksICInIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpOwogICAgIEFTU0VSVChl
eGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKICAgICBzdGF0aWNfY2FzdDxFcnJvckluc3Rh
bmNlKj4oZXhjZXB0aW9uKS0+c2V0QXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CkBAIC0xNDAsNyAr
MTQwLDcgQEAgSlNPYmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdAogCiBKU09i
amVjdCogY3JlYXRlTm90QW5PYmplY3RFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLCAiJyBpcyBub3QgYW4gb2JqZWN0Iik7CisgICAgVVN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBtYWtlVVN0cmluZygiJyIsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSwgIicgaXMgbm90IGFuIG9iamVjdCIpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
LT5pc0Vycm9ySW5zdGFuY2UoKSk7CiAgICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4
Y2VwdGlvbiktPnNldEFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNyArOTYsMTcgQEAgSlNPYmpl
Y3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIGlmIChhcmdzLmlzRW1wdHko
KSkKICAgICAgICAgcHJvZ3JhbSA9ICIoZnVuY3Rpb24oKSB7IFxufSkiOwogICAgIGVsc2UgaWYg
KGFyZ3Muc2l6ZSgpID09IDEpCi0gICAgICAgIHByb2dyYW0gPSBtYWtlVVN0cmluZygiKGZ1bmN0
aW9uKCkgeyAiLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCAiXG59KSIpOworICAgICAgICBw
cm9ncmFtID0gbWFrZVVTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyksICJcbn0pIik7CiAgICAgZWxzZSB7CiAgICAgICAgIFVTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoZnVuY3Rpb24oIik7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYXJncy5zaXplKCkgLSAxOyBpKysp
IHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
fQogICAgICAgICBidWlsZGVyLmFwcGVuZCgiKSB7ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZChhcmdzLmF0KGFyZ3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChhcmdzLmF0KGFyZ3Muc2l6ZSgpIC0gMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxufSkiKTsKICAgICAgICAgcHJvZ3Jh
bSA9IGJ1aWxkZXIudG9VU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0TGVuZ3Ro
IC0gbnVtQm91bmRBcmdzOwogICAgIH0KIAotICAgIElkZW50aWZpZXIgbmFtZShleGVjLCB0YXJn
ZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKSk7
CisgICAgSWRlbnRpZmllciBuYW1lKGV4ZWMsIHRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm5hbWUpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCwgdGFyZ2V0T2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSwgYm91bmRBcmdzLCBsZW5ndGgs
IG5hbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2Vz
IGFuIGV4Y2VwdGlvbi4KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNb
aV0uZmlyc3QudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTMgKzE0NSw2IEBAIGRvdWJsZSBK
U0NlbGw6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNPYmplY3QqPih0aGlzKS0+dG9OdW1iZXIoZXhlYyk7CiB9CiAKLVVTdHJpbmcgSlND
ZWxsOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50
b1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QqPih0
aGlzKS0+dG9TdHJpbmcoZXhlYyk7Ci19Ci0KIEpTT2JqZWN0KiBKU0NlbGw6OnRvT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAg
ICBpZiAoaXNTdHJpbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0cmluZyB0b1N0cmluZyhF
eGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRv
T2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw4ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKIHsKLSAgICBVU3RyaW5nIHN0
ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIENTdHJpbmcgY3N0ciA9
IHN0ci51dGY4KHRydWUpOworICAgIENTdHJpbmcgY3N0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS51dGY4KHRydWUpOwogICAgIGlmICghY3N0ci5kYXRh
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVVSSUVycm9yKGV4ZWMs
ICJTdHJpbmcgY29udGFpbmVkIGFuIGlsbGVnYWwgVVRGLTE2IHNlcXVlbmNlLiIpKTsKIApAQCAt
MTQzLDcgKzE0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGMK
IHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRvTm90
VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewogICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIFVTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgCiAgICAgaWYgKHN0ci5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGRlY29kZShl
eGVjLCBzdHIuY2hhcmFjdGVyczgoKSwgc3RyLmxlbmd0aCgpLCBkb05vdFVuZXNjYXBlLCBzdHJp
Y3QpOwpAQCAtNTEzLDcgKzUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0UKICAgICBpZiAoIXguaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh4KTsKIAotICAgIFVTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICBpZiAocy5pczhC
aXQoKSkgewogICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5j
aGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09OKTsKQEAgLTU1Niw3ICs1NTUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgfQogCiAg
ICAgLy8gSWYgVG9TdHJpbmcgdGhyb3dzLCB3ZSBzaG91bGRuJ3QgY2FsbCBUb0ludDMyLgotICAg
IFVTdHJpbmcgcyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAg
LTU2NSw3ICs1NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQ
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFy
c2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQoZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMpCkBAIC02MjMsNyArNjIyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgICAgICAiKist
Li9AXyI7CiAKICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgc3RyID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChzdHIu
aXM4Qml0KCkpIHsKICAgICAgICAgY29uc3QgTENoYXIqIGMgPSBzdHIuY2hhcmFjdGVyczgoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IHN0ci5sZW5ndGgoKTsgaysrLCBjKysp
IHsKQEAgLTY2Miw3ICs2NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNFCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVVN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3Ry
aW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcg
c3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IGludCBrID0gMDsKICAgICBpbnQgbGVuID0gc3RyLmxlbmd0aCgpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEw
NTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHVu
d3JhcEJveGVkUHJpbWl0aQogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6
OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBqc051bWJlcihvYmplY3QtPnRvTnVtYmVyKGV4ZWMp
KTsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQotICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgb2JqZWN0LT50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgIHJldHVybiBvYmplY3QtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChvYmplY3QtPmluaGVy
aXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQogICAgICAgICByZXR1cm4gb2JqZWN0LT50b1By
aW1pdGl2ZShleGVjKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0yMjMsMjUgKzIyMywxMiBAQCBT
dHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgaWYgKG5hbWUuZ2V0U3RyaW5n
KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQ
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmFt
ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBuYW1lLmFzTnVtYmVyKCkpKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKG5h
bWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIGlmICghYXNPYmplY3QobmFtZSktPmlu
aGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykgJiYgIWFzT2JqZWN0KG5hbWUpLT5pbmhlcml0
cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC04MjUsOCArODEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU09OUHJvdG9GdQogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJKU09O
LnBhcnNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIiKSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIFVTdHJpbmcgc291cmNlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsMTEgKzUxOCwxMSBAQCBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlCiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKIH0KIAotVVN0
cmluZyBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNTdHJpbmcq
IEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1
ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4g
anNFbXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVt
YmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0
b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0
cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgICAgIC8vIE5P
VEU6IEpTT2JqZWN0IGFuZCBpdHMgc3ViY2xhc3NlcyBtdXN0IGJlIGFibGUgdG8gZ3JhY2VmdWxs
eSBoYW5kbGUgRXhlY1N0YXRlKiA9IDAsCiAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxsIG1h
eSBjb21lIGZyb20gaW5zaWRlIHRoZSBjb21waWxlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5
LDExICsyMjksNiBAQCBkb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgcmV0dXJuIGpzVG9OdW1iZXIodmFsdWUoZXhlYykpOwogfQogCi1VU3RyaW5nIEpTU3RyaW5n
Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZhbHVlKGV4
ZWMpOwotfQotCiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJp
bmcpCiB7CiAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE3LDcgKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9v
bCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUm
KSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
CiAgICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC00NTMsMjQgKzQ1Miwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzVHJ1ZSgpOyAvLyBmYWxzZSwg
bnVsbCwgYW5kIHVuZGVmaW5lZCBhbGwgY29udmVydCB0byBmYWxzZS4KICAgICB9CiAKLSAgICBp
bmxpbmUgVVN0cmluZyBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cisg
ICAgaW5saW5lIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlm
IChpc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVy
aWNTdHJpbmdzLmFkZChhc0ludDMyKCkpOwotICAgICAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKGFzRG91
YmxlKCkpOwotICAgICAgICBpZiAoaXNUcnVlKCkpCi0gICAgICAgICAgICByZXR1cm4gInRydWUi
OwotICAgICAgICBpZiAoaXNGYWxzZSgpKQotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7Ci0g
ICAgICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAg
IGlmIChpc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwotICAg
ICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvU3RyaW5n
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxs
KCkpOworICAgICAgICByZXR1cm4gdG9TdHJpbmdTbG93Q2FzZShleGVjKTsKICAgICB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTAgKzIwNCw5IEBAIGJvb2wg
SlNWYWx1ZTo6aXNWYWxpZENhbGxlZSgpCiAgICAgcmV0dXJuIGFzT2JqZWN0KGFzQ2VsbCgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiB9CiAKLUpTU3RyaW5nKiBKU1ZhbHVlOjp0b1ByaW1pdGl2ZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgaWYgKGlzU3RyaW5nKCkpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICBBU1NFUlQo
IWlzU3RyaW5nKCkpOwogICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmlu
ZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3Mu
YWRkKGFzSW50MzIoKSkpOwogICAgIGlmIChpc0RvdWJsZSgpKQpAQCAtMjIyLDEwICsyMjEsMTEg
QEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvUHJpbWl0aXZlU3RyaW5nKEV4ZQogICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlZmlu
ZWQudXN0cmluZygpKTsKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgSlNWYWx1ZSB2ID0g
YXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIE5vUHJlZmVyZW5jZSk7Ci0gICAgaWYgKHYuaXNT
dHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odi5hc0NlbGwo
KSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHYudG9TdHJpbmco
ZXhlYykpOworICAgIEpTVmFsdWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywg
UHJlZmVyU3RyaW5nKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7
CisgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9u
IDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk3LDggKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUg
aWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRl
IGFscmVhZHkuCiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNTdHJp
bmcqIHRvUHJpbWl0aXZlU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1N0cmlu
ZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKQEAgLTI0NSw2ICsyNDQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBpbmxpbmUgY29uc3QgSlNWYWx1ZSBhc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVt
YmVyU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTU3RyaW5nKiB0b1N0cmlu
Z1Nsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9UaGlzT2JqZWN0U2xv
d0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bnVtYmVyUHJvdG8KICAgICAgICAgcmFkaXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJhZGl4VmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpKTsgLy8gbmFuIC0+IDAKIAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBqc051bWJlcih4KS50
b1N0cmluZyhleGVjKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KHgpLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIC8vIEZhc3QgcGF0aCBmb3IgbnVtYmVyIHRvIGNo
YXJhY3RlciBjb252ZXJzaW9uLgogICAgIGlmIChyYWRpeCA9PSAzNikgewpAQCAtNDc0LDcgKzQ3
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICBpZiAo
IXRvVGhpc051bWJlcihleGVjLT5ob3N0VGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywganNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcg
KzE0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIHsKICAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgcHJvcGVydHkg
ZGVzY3JpcHRvciBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9iamVjdC4iKSk7Ci0gICAgVVN0
cmluZyBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CkBAIC0yOTIsNyArMjkyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlmICghZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3Rz
LiIpKTsKICAgICBKU09iamVjdCogTyA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
OworICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlz
VmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+aGFzT3duUHJv
cGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQ5LDcg
KzE0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEoZXhlYy0+YXJndW1lbnQoMSks
IGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwot
ICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZUdldHRlcih0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwg
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWZpbmVHZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgxKSksIDApOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENh
bGxEYXRhKGV4ZWMtPmFyZ3VtZW50KDEpLCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJp
bnZhbGlkIHNldHRlciB1c2FnZSIpKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWZpbmVTZXR0ZXIodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgMCk7
CisgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lU2V0dGVyKHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCAwKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xNzIsNyArMTcyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+bG9va3Vw
R2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5sb29rdXBH
ZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4MSwxMyAr
MTgxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3Qt
Pmxvb2t1cFNldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+
bG9va3VwU2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhl
YyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRoaXNWYWx1ZS50b09iamVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUo
ZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKSkpOwogfQogCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9j
YWxlU3RyaW5nKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDExIEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEYKICAgICBKU1ZhbHVlIHAxID0g
djEudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRp
dmUoY2FsbEZyYW1lKTsKIAotICAgIGlmIChwMS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJldHVy
biBwMi5pc1N0cmluZygpCi0gICAgICAgICAgICA/IGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJp
bmcocDEpLCBhc1N0cmluZyhwMikpCi0gICAgICAgICAgICA6IGpzU3RyaW5nKGNhbGxGcmFtZSwg
YXNTdHJpbmcocDEpLCBqc1N0cmluZyhjYWxsRnJhbWUsIHAyLnRvU3RyaW5nKGNhbGxGcmFtZSkp
KTsKLSAgICB9CisgICAgaWYgKHAxLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwgcDIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CisKICAg
ICBpZiAocDIuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwg
anNTdHJpbmcoY2FsbEZyYW1lLCBwMS50b1N0cmluZyhjYWxsRnJhbWUpKSwgYXNTdHJpbmcocDIp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDEudG9TdHJpbmcoY2FsbEZy
YW1lKSwgYXNTdHJpbmcocDIpKTsKIAogICAgIHJldHVybiBqc051bWJlcihwMS50b051bWJlcihj
YWxsRnJhbWUpICsgcDIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMDU2NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDEwICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdHJp
bmdzW2ldLmpzVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0
YSwgdi50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYu
dG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkg
PCBvbGRMZW5ndGgpIC8vIFRydWUgZm9yIG92ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKQEAgLTk3LDIwICs5NCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRl
cigqZ2xvYmFsRGF0YSk7Ci0KLSAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHRoaXNWYWx1ZSkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0
YSwgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVu
ZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0
aCA9IDA7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudChp
KTsKLSAgICAgICAgICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgcm9wZUJ1
aWxkZXIuYXBwZW5kKGFzU3RyaW5nKHYpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByb3BlQnVpbGRlci5hcHBlbmQoanNTdHJpbmcoZ2xvYmFsRGF0YSwgdi50b1N0cmluZyhl
eGVjKSkpOworICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHYudG9TdHJpbmcoZXhlYykp
OwogCiAgICAgICAgICAgICBpZiAocm9wZUJ1aWxkZXIubGVuZ3RoKCkgPCBvbGRMZW5ndGgpIC8v
IFRydWUgZm9yIG92ZXJmbG93CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKQEAgLTMwMCwxMSArMjkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIodjEuYXNOdW1iZXIoKSArIHYyLmFzTnVtYmVyKCkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHYxLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB2Mi5pc1N0cmlu
ZygpCi0gICAgICAgICAgICAgICAgPyBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHYxKSwg
YXNTdHJpbmcodjIpKQotICAgICAgICAgICAgICAgIDoganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0
cmluZyh2MSksIHYyLnRvUHJpbWl0aXZlU3RyaW5nKGNhbGxGcmFtZSkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2Mi5pc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhjYWxs
RnJhbWUpKTsKIAogICAgICAgICAvLyBBbGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1v
bgogICAgICAgICByZXR1cm4ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBA
QCB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoSlNDZWxsKiBjZWxsCiAKIHZvaWQgc2V0UmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCkt
PnNldElucHV0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBhc1JlZ0V4cENvbnN0cnVjdG9y
KGJhc2VPYmplY3QpLT5zZXRJbnB1dCh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwogfQogCiB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCkBAIC0zMjMsMTMgKzMyMywx
MyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJl
dHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CiAKLSAgICBVU3RyaW5nIHBhdHRlcm4gPSBhcmcw
LmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdz
OwogICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGZsYWdzID0gcmVnRXhw
RmxhZ3MoYXJnMS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3Mo
YXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGZsYWdzID09
IEludmFsaWRGbGFncykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIz
MSw3IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjpleGVjKEV4ZWNTdGF0ZSogZXgKIGJvb2wgUmVn
RXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwotICAgIFVTdHJpbmcgaW5wdXQgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgaWYgKCFyZWdFeHAoKS0+Z2xvYmFsKCkpIHsKICAg
ICAgICAgaW50IHBvc2l0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsMTMgKzExMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiQ2Fubm90IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGluZyBvbmUgUmVn
RXhwIGZyb20gYW5vdGhlci4iKSk7CiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFy
ZzApLT5yZWdFeHAoKTsKICAgICB9IGVsc2UgewotICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSAh
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0
cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBSZWdFeHBGbGFncyBmbGFncyA9IE5vRmxhZ3M7
CiAgICAgICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBmbGFncyA9
IHJlZ0V4cEZsYWdzKGFyZzEudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgZmxhZ3MgPSBy
ZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJbnZh
bGlkRmxhZ3MpCkBAIC0xNTMsNyArMTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90bwogICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwogICAgIGlmICh0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9C
b29sZWFuKGV4ZWMpKQogICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKLSAgICBVU3RyaW5n
IHNvdXJjZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291
cmNlKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNPYmplY3QtPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgLy8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzopLyIgdG8gYXZv
aWQgY29sbGlkaW5nIHdpdGggY29tbWVudCBzeW50YXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIi8iLCBzb3VyY2UubGVuZ3RoKCkgPyBz
b3VyY2UgOiBVU3RyaW5nKCIoPzopIiksIHBvc3RmaXgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKICAgICAKLSAg
ICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKQotICAgICAg
ICA/IGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKQotICAgICAgICA6IGpzU3RyaW5nKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKCksIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Ry
aW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0
VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTExLDcgKzEwOCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiB9CiAKIENhbGxUeXBlIFN0cmluZ0NvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBzdGF0aWMg
TkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXBsYWNl
bWVudFN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgcmVwbGFj
ZW1lbnRTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
CiAgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICB1
bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CkBAIC01MDIsMTAgKzUwMiw3IEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgICAgIGlmIChM
SUtFTFkocmVzdWx0LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGFzU3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRv
U3RyaW5nKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJh
bWUoZXhlYykpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNTQ3LDEwICs1NDQs
NyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAKICAgICAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3Vs
dC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5nKGNhY2hlZENhbGwubmV3Q2Fs
bEZyYW1lKGV4ZWMpKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU5NCw3ICs1
ODgsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAg
ICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0KSk7CiAgICAg
ICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyaW5nKTsKIAotICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0
YSwganNVbmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTYzMyw3ICs2MjcsNyBA
QCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSBy
ZXBsYWNlVmFsdWUpCiB7CiAgICAgY29uc3QgVVN0cmluZyYgc3RyaW5nID0ganNTdHJpbmctPnZh
bHVlKGV4ZWMpOwotICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NTMsNyAr
NjQ3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAg
ICBVU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgVVN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY2NSwxMiArNjU5LDkgQEAg
c3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKLSAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgICAgICB0aGlzVmFsdWUgPSBqc1N0cmluZyhleGVj
LCB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwotICAgIH0KLSAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcodGhpc1ZhbHVlKTsKKyAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyk7CiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IEpTVmFsdWUgcmVwbGFjZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTY5OCw3ICs2
ODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwogICAgIEpTVmFs
dWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewpAQCAt
NzE4LDcgKzcwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7CiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigp
KSB7CkBAIC03MzksMTIgKzczMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29u
Y2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAxKSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVu
dCgwKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2LmlzU3RyaW5nKCkKLSAgICAg
ICAgICAgID8ganNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwgYXNTdHJpbmcodikp
Ci0gICAgICAgICAgICA6IGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIGpzU3Ry
aW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHYudG9TdHJpbmcoZXhlYykpKSk7Ci0gICAgfQorICAg
IGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAmJiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5n
KHRoaXNWYWx1ZSksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisKICAgICBp
ZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxl
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmdGcm9tQXJndW1lbnRzKGV4ZWMsIHRoaXNWYWx1ZSkpOwpAQCAt
NzU1LDEyICs3NDMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CiAKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwotICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBwb3M7
CiAgICAgaWYgKGExLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHBvcyA9IDA7CkBAIC03ODYsMTMg
Kzc3NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKIAogICAgIEpTVmFs
dWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1l
bnQoMSk7CiAKLSAgICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBkb3VibGUgZHBvcyA9
IGExLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwogICAgIGlmIChkcG9zIDwgMCkKICAgICAg
ICAgZHBvcyA9IDA7CkBAIC04MTAsNyArNzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tP
YmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTgyNSw3ICs4MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1
bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVy
IEVDTUEgMTUuMTAuNC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkg
c3RyaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhMC50b1N0cmlu
ZyhleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJy
b3IoZXhlYywgcmVnLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KQEAgLTg2Miw3ICs4NTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtODc3LDcgKzg2
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
ICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhw
KHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlzIHVuZGVm
aW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAgICAgICBy
ZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkg
PyBVU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVn
ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8g
VVN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxhZ3MpOwog
ICAgICAgICBpZiAoIXJlZy0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWctPmVycm9yTWVzc2FnZSgpKSk7
CiAgICAgfQpAQCAtODkzLDcgKzg4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0
Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLmxlbmd0
aCgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtOTI1LDcgKzkx
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAgIC8v
IDIuIExldCBTIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb1N0cmluZywgZ2l2aW5nIGl0IHRo
ZSB0aGlzIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4KICAgICAvLyA2LiBMZXQgcyBiZSB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgaW4gUy4KLSAgICBVU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogCiAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRl
ZCBhcyBpZiBieSB0aGUgZXhwcmVzc2lvbiBuZXcgQXJyYXkoKQogICAgIC8vICAgIHdoZXJlIEFy
cmF5IGlzIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBjb25zdHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4K
QEAgLTEwMjcsNyArMTAxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVT
dHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IFVTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogCiAgICAgICAgIC8vIDkuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KICAgICAgICAg
aWYgKCFsaW1pdCkKQEAgLTExMTQsNyArMTEwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
dVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgdVN0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CkBAIC0xMTQ0LDI0ICsx
MTMyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpbnQgbGVuOwotICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IDA7Ci0gICAgVVN0cmlu
ZyB1U3RyaW5nOwotICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBqc1N0
cmluZyA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odGhpc1ZhbHVlLmFzQ2VsbCgpKTsKLSAgICAg
ICAgbGVuID0ganNTdHJpbmctPmxlbmd0aCgpOwotICAgIH0gZWxzZSBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAg
ICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNp
YmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7Ci0gICAg
fQorCisgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgaW50IGxlbiA9IGpz
U3RyaW5nLT5sZW5ndGgoKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMp
OwogICAgIGRvdWJsZSBlbmQ7CkBAIC0xMTg1LDkgKzExNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgfQogICAgIHVuc2lnbmVkIHN1YnN0cmluZ1N0
YXJ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KTsKICAgICB1bnNpZ25lZCBzdWJzdHJp
bmdMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN1YnN0cmluZ1N0YXJ0Owot
ICAgIGlmIChqc1N0cmluZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0
cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywgdVN0cmluZywgc3Vi
c3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdWJzdHJpbmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdM
ZW5ndGgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMTk1LDcgKzExNzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS5pc1N0cmlu
ZygpID8gYXNTdHJpbmcodGhpc1ZhbHVlKSA6IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKSk7CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCiAgICAgaW50
IHNTaXplID0gcy5sZW5ndGgoKTsKQEAgLTEyMTQsNyArMTE5Miw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLmlzU3RyaW5nKCkgPyBhc1N0
cmluZyh0aGlzVmFsdWUpIDoganNTdHJpbmcoZXhlYywgdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBj
b25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBz
Lmxlbmd0aCgpOwpAQCAtMTI1NywxMCArMTIzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVj
a09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
LSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihsb2NhbGVDb21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTI2OCw3ICsxMjQ2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8YmlnPiIsIHMsICI8L2JpZz4iKSk7CiB9CiAKQEAgLTEyNzcsNyArMTI1NSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHNtYWxsPiIsIHMsICI8L3NtYWxsPiIpKTsKIH0KIApAQCAtMTI4Niw3ICsxMjY0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxpbms+IikpOwogfQogCkBAIC0xMjk1LDcgKzEy
NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxiPiIsIHMsICI8L2I+IikpOwogfQogCkBAIC0xMzA0LDcgKzEyODIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7CiB9CiAKQEAgLTEzMTMsNyArMTI5MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGk+IiwgcywgIjwvaT4iKSk7CiB9CiAKQEAgLTEzMjIsNyArMTMwMCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiPHN0cmlrZT4iLCBzLCAiPC9zdHJpa2U+IikpOwogfQogCkBAIC0xMzMxLDcgKzEz
MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxzdWI+IiwgcywgIjwvc3ViPiIpKTsKIH0KIApAQCAtMTM0MCw3ICsx
MzE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8c3VwPiIsIHMsICI8L3N1cD4iKSk7CiB9CiAKQEAgLTEzNDksOSAr
MTMyNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1Zh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxm
b250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Ijxmb250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiXCI+Iiwg
cywgIjwvZm9udD4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTM1OSw3ICsxMzM3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCiAgICAgdWludDMy
X3Qgc21hbGxJbnRlZ2VyOwpAQCAtMTM5Niw3ICsxMzc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBpbXBsKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwg
YTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIi
LCBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3Io
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTQwNCw5ICsxMzgyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNWYWx1
ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMp
LCAiXCI+IiwgcywgIjwvYT4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCAiXCI+IiwgcywgIjwvYT4iKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDE0LDkg
KzEzOTIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0g
ICAgVVN0cmluZyBsaW5rVGV4dCA9IGEwLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgbGlu
a1RleHQgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBs
aW5rVGV4dFNpemUgPSBsaW5rVGV4dC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBzdHJpbmdTaXpl
ID0gcy5sZW5ndGgoKTsKQEAgLTE0NTksNyArMTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSB0cmltU3RyaW5nKEV4ZWNTdGEKIHsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBVU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CiAgICAgaWYgKHRyaW1LaW5kICYgVHJpbUxlZnQpIHsK
ICAgICAgICAgd2hpbGUgKGxlZnQgPCBzdHIubGVuZ3RoKCkgJiYgaXNUcmltV2hpdGVzcGFjZShz
dHJbbGVmdF0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KKworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmlu
ZyogaW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGVJ
bnRlcm5hbCk6CisKIDIwMTItMDEtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgYSBuZXcgYWxsb2NhdG9yIGZvciBiYWNraW5n
IHN0b3JlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkocmV2aXNpb24gMTA1NjU2
KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUsNyArMjE1LDcgQEAgQ0ZUeXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbChKU1Zh
bAogCiAgICAgICAgIGlmIChpblZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgVVN0cmluZyB1U3RyaW5nID0gaW5WYWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVTdHJpbmcgPSBpblZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBVU3RyaW5nVG9DRlN0cmluZyh1
U3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI5IEBACisyMDEyLTAxLTIzICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmco
KSBzaG91bGQgcmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdl
cyB0byBjYWxsIHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBj
b252ZXJ0IGZyb20gIkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3Ry
aW5nKSwgc2luY2UKKyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysg
c3RyaW5nIi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJk
OjpnZXREYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3Vw
TmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2spOgorICAgICAgICAo
V2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
Rm9ybURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Gb3JtRGF0YTo6YXBw
ZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2aWNlTW90aW9uRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZp
Y2VPcmllbnRhdGlvbkV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxD
YW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246
Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkb2N1bWVudFdyaXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJ
bnB1dEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJl
Zik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9j
YXRpb246OnNldEhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
TG9jYXRpb246OnNldEhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUluaXRNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNh
Y3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6ZXhl
Y3V0ZVNxbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVT
cWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTU2hh
cmVkV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6
OmNsb3NlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dvcmtlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1hNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVk
dWxlZEFjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keSk6
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgor
ICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWZpbml0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIGJyaWRn
ZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFs
dWVUb0pPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZh
QXJyYXkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHA6CisgICAgICAgIChKYXZh
RmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2
YUluc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAqIHRlc3RpbmcvanMvSlNJbnRlcm5h
bHNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcm5hbHM6OnNldFVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMpOgorCiAyMDEyLTAxLTE4ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBkZWxheWVkIERDIGFsbG9jYXRpb24gaW4gSFduZERD
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUKICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQz
MihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgogICAg
IHJldHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnB1dERlbGVnYXRlKAogCiBKU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUodXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBK
U1ZhbHVlIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlCiAgICAgfQogCiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgIGNsaXBib2FyZC0+Y2xlYXJE
YXRhKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIApAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJk
OjpnZXREYXRhKEV4ZWNTdGF0ZSogCiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7
CiAKICAgICBib29sIHN1Y2Nlc3M7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0
RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBz
dWNjZXNzKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY2xpcGJvYXJkLT5nZXREYXRhKHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBz
dWNjZXNzKTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBO
YQogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmVzdWx0
ID0gdXN0cmluZ1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBy
ZXN1bHQgPSB1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgfQogCiAgICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFN0cmluZyB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3QKIHsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAg
IHJldHVybiB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKIH0KIAogSlNWYWx1ZSBqc0RhdGVPck51bGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFs
dWUpCkBAIC0xNTEsMTAgKzE1MSwxMCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRp
b24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2Vw
dGlvbi50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlv
bi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9i
amVjdCA9IGV4Y2VwdGlvbi50b09iamVjdChleGVjKTsKICAgICBpbnQgbGluZU51bWJlciA9IGV4
Y2VwdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSkudG9JbnQz
MihleGVjKTsKLSAgICBVU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInNvdXJjZVVSTCIpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIGlmIChFeGNlcHRp
b25CYXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2VwdGlvbikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE1ICs2MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRE9NRm9ybURhCiBKU1ZhbHVlIEpTRE9NRm9y
bURhdGE6OmFwcGVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgICAg
ICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkgewogICAgICAgICAgICAgU3Ry
aW5nIGZpbGVuYW1lOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAz
ICYmICFleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
ICAgIGZpbGVuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAg
aW1wbCgpLT5hcHBlbmQobmFtZSwgdG9CbG9iKHZhbHVlKSwgZmlsZW5hbWUpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwg
dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwogICAg
IH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6
OmRlbGV0ZVByb3BlcnR5KEpTQ2UKIAogYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFs
dWUgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSoKICAgICB9CiAjZW5kaWYKIAotICAgIFVTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01MTIsNyArNTEyLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6b3BlbihFeGVjU3RhdGUqIGV4ZQogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVm
aW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwpAQCAt
Njc5LDcgKzY3OSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoRXgK
ICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSks
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBA
IC02OTMsNyArNjkzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWlj
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBs
KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSku
Z2V0KCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2
aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIEpTVmFsdWUgSlNEZXZpY2VN
b3Rpb25FdmVudDo6aW50ZXJ2YWwoRXgKIAogSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojpp
bml0RGV2aWNlTW90aW9uRXZlbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSk7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgYm9vbCBidWJibGVzID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZl
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphYnNvbHUK
IAogSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZpY2VPcmllbnRhdGlv
bkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGNvbnN0
IFN0cmluZyYgdHlwZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgLy8gSWYgYWxwaGEsIGJldGEgb3IgZ2FtbWEgYXJl
IG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFs
dWUoRXhlY1N0YXQKIAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgcmVzdWx0ID0gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBTY3JpcHRWYWx1ZSYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiAK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc3RyID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyID0gdXN0
cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICBG
cmFtZSogbGV4aWNhbEZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHQKICAgICAgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9y
ZVJlc3VsdCh1c3RyaW5nVG9TdHJpbmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAobV9pc0F0dHJpYnV0ZSkg
ewogICAgICAgICAgICAgICAgIGlmIChyZXR2YWwuaXNGYWxzZSgpKQogICAgICAgICAgICAgICAg
ICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5k
ZXg+KSBldGMuCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKHN0cmluZywgb2spOwogICAgICAg
ICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywg
anNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aXRlbShpbmRleCkpKTsK
QEAgLTgzLDggKzgzLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bAogCiAgICAgLy8gVGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBp
dGVtIHdlIHdhbnQKICAgICBib29sIG9rOwotICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBJZGVudGlmaWVy
Ojp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSwgb2spOworICAgIFVT
dHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIHVuc2lnbmVkIGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKSB7
CiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtV2l0aEluZGV4
KHVzdHJpbmdUb0F0b21pY1N0cmluZyhzdHJpbmcpLCBpbmRleCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3Qo
KSwgbm9kZSkpOwpAQCAtMTEzLDE1ICsxMTMsMTUgQEAgSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0
aW9uOjpuYW1lR2V0dGVyKAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRp
Zmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyksIG9rKTsKKyAg
ICB1aW50MzJfdCBpbmRleCA9IElkZW50aWZpZXI6OnRvVUludDMyKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgb2spOwogICAgIGlmIChvaykKICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShpbmRleCkpOwot
ICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSkpOwogfQogCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMo
ZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2Fz
dDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgY29udGV4
dElkID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmlu
ZyYgY29udGV4dElkID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5B
QkxFKFdFQkdMKQogICAgIGlmIChjb250ZXh0SWQgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwg
Y29udGV4dElkID09ICJ3ZWJraXQtM2QiKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1
NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE1ICs3MiwxNSBAQCBKU1ZhbHVlIEpTSFRNTENv
bGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlCiBKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0o
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGJvb2wgb2s7Ci0gICAgdWludDMyX3QgaW5kZXggPSBJ
ZGVudGlmaWVyOjp0b1VJbnQzMihleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgb2sp
OworICAgIHVpbnQzMl90IGluZGV4ID0gSWRlbnRpZmllcjo6dG9VSW50MzIoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBvayk7CiAgICAgaWYgKG9rKQogICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLT5pdGVtKGluZGV4
KSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVj
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlv
bjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmll
cihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsK
IH0KIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwxNCArMTM2LDE0IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGEKIAogICAgIHNpemVfdCBzaXplID0gZXhl
Yy0+YXJndW1lbnRDb3VudCgpOwogCi0gICAgVVN0cmluZyBmaXJzdFN0cmluZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgU2VnbWVudGVk
U3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhmaXJzdFN0cmluZyk7CiAg
ICAgaWYgKHNpemUgIT0gMSkgewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICBzZWdt
ZW50ZWRTdHJpbmcuY2xlYXIoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3Vi
c2VxdWVudFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBzZWdtZW50ZWRTdHJp
bmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc3Vic2VxdWVudFN0cmlu
ZykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSlNI
VE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXIKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlucHV0LT5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgaW5wdXQtPnNldFNlbGVjdGlvbkRpcmVjdGlvbih1c3Ry
aW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKIEpT
VmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb24KIAogICAgIGludCBzdGFydCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7
CiAgICAgaW50IGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgU3Ry
aW5nIGRpcmVjdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIGRpcmVjdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgaW5wdXQtPnNl
dFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIEpTVmFsdWUgSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb24KICAgICAgICAgaWYgKCF0eXBlLmlzU3RyaW5n
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgdHlwZVN0cmluZyA9
IHVzdHJpbmdUb1N0cmluZyh0eXBlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgU3RyaW5nIHR5
cGVTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcodHlwZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICAgICBpZiAodHlwZVN0cmluZyA9PSAic2VwYXJhdG9yIikgewogICAgICAgICAg
ICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbUN1
c3RvbVRhZ05vQWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvbnRleHRN
ZW51QWN0aW9uIHR5cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oQ29udGV4
dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAg
Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSA9IG5ldyBDb250ZXh0TWVudUl0ZW0oKHR5cGVTdHJp
bmcgPT0gImNoZWNrYm94IiA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlKSwgdHlw
ZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0qIG1lbnVJdGVtID0gbmV3IENvbnRleHRNZW51SXRlbSgodHlwZVN0
cmluZyA9PSAiY2hlY2tib3giID8gQ2hlY2thYmxlQWN0aW9uVHlwZSA6IEFjdGlvblR5cGUpLCB0
eXBlZElkLCB1c3RyaW5nVG9TdHJpbmcobGFiZWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KSk7CiAgICAgICAgICAgICBpZiAoIWVuYWJsZWQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
ICAgICBtZW51SXRlbS0+c2V0RW5hYmxlZChlbmFibGVkLnRvQm9vbGVhbihleGVjKSk7CiAgICAg
ICAgICAgICBpZiAoIWNoZWNrZWQuaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS0+ZXZh
bHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBleGNl
cHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBl
eGNlcHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5
LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpkZWZpbmVHZXR0ZXIoSlNPYmplY3QqIAogCiB2b2lkIEpT
TG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFVTdHJpbmcgaHJlZiA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgaHJlZiA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhyZWYodXN0cmluZ1Rv
U3RyaW5nKGhyZWYpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMp
KTsKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRl
KiBleGVjCiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcHJvdG9jb2wgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIGhvc3QgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGhvc3QgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyhob3N0KSwgYWN0
aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMDUsNyArMjA1
LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpT
TG9jYXRpb246OnNldEhvc3RuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBVU3RyaW5nIGhvc3RuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBob3N0bmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldEhv
c3RuYW1lKHVzdHJpbmdUb1N0cmluZyhob3N0bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSlNMb2NhdGlv
bjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVU3RyaW5nIHBvcnQgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBvcnQgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbCgpLT5zZXRQb3J0KHVzdHJpbmdUb1N0cmluZyhwb3J0KSwgYWN0aXZl
RE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CkBAIC0yMjEsNyArMjIxLDcg
QEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYwogCiB2b2lkIEpTTG9j
YXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBw
YXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCktPnNldFBhdGhu
YW1lKHVzdHJpbmdUb1N0cmluZyhwYXRobmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmly
c3RET01XaW5kb3coZXhlYykpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6
c2V0UGF0aG5hbWUoRXhlY1N0YXRlKiAKIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHBhdGhuYW1lID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwoKS0+c2V0U2VhcmNoKHVzdHJpbmdUb1N0cmluZyhwYXRo
bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwpAQCAt
MjM3LDcgKzIzNyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXgK
IAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBVU3RyaW5nIGhhc2ggPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3Ry
aW5nIGhhc2ggPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLT5zZXRIYXNo
KHVzdHJpbmdUb1N0cmluZyhoYXNoKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNo
KEV4ZWNTdGF0ZSogZXhlYwogCiBKU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlcGxhY2UodXN0
cmluZ1RvU3RyaW5nKHVybFN0cmluZyksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01X
aW5kb3coZXhlYykpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVs
b2FkKEV4ZWNTdGF0ZSogZXgKIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFVTdHJpbmcgdXJsU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPmFzc2lnbih1c3Ry
aW5nVG9TdHJpbmcodXJsU3RyaW5nKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMiwxMSArMTAyLDExIEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEV4ZWNT
dGF0ZSoKIAogc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KEpTTWVz
c2FnZUV2ZW50KiBqc0V2ZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBV
U3RyaW5nJiB0eXBlQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
Y29uc3QgVVN0cmluZyYgdHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvQm9vbGVhbihleGVjKTsKICAgICBib29sIGNhbmNlbGFibGVBcmcgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhl
Yy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgbGFzdEV2
ZW50SWRBcmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBV
U3RyaW5nJiBvcmlnaW5BcmcgPSBleGVjLT5hcmd1bWVudCg0KS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgbGFzdEV2ZW50SWRBcmcgPSBleGVjLT5hcmd1
bWVudCg1KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgRE9NV2luZG93KiBzb3Vy
Y2VBcmcgPSB0b0RPTVdpbmRvdyhleGVjLT5hcmd1bWVudCg2KSk7CiAgICAgT3duUHRyPE1lc3Nh
Z2VQb3J0QXJyYXk+IG1lc3NhZ2VQb3J0czsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDcpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246
OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkBAIC04MSw3ICs4MSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGUKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rp
b25TeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25T
eW5jOjpleGVjdXRlU3FsCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkBAIC04MCw3ICs4MCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1
dGVTcWwKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2Vy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1No
YXJlZFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMTAgKzYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNTaGFyZWRXb3IK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRz
IikpOwogCi0gICAgVVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBVU3RyaW5nIG5hbWU7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDEpCi0gICAgICAgIG5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50
b1N0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGUKICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdXN0cmlu
Z1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEV4dGUKICAgICAgICAgcmV0dXJuIHRocm93U3ludGF4RXJyb3IoZXhlYyk7CiAKICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpOwotICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgU3RyaW5n
JiBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9uKG5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJT
b2NrZXQKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKSk7CiAKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJ3cm9uZyBVUkwiKSk7CiAgICAg
UmVmUHRyPFdlYlNvY2tldD4gd2ViU29ja2V0ID0gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7
CkBAIC03MywxNCArNzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNv
Y2tldAogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAg
SlNBcnJheSogcHJvdG9jb2xzQXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmlu
Zyhwcm90b2NvbHNBcnJheS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbHNBcnJheS0+
Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBw
ZW5kKHByb3RvY29sKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29u
bmVjdCh1cmxTdHJpbmcsIHByb3RvY29scywgZWMpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKHByb3RvY29sc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0
cmluZyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVj
dCh1cmxTdHJpbmcsIHByb3RvY29sLCBlYyk7CkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1ZSBK
U1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZQogICAgIGVsc2UgaWYgKG1lc3NhZ2UuaW5o
ZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHRv
QmxvYihtZXNzYWdlKSwgZWMpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgc3RyaW5nTWVz
c2FnZSA9IHVzdHJpbmdUb1N0cmluZyhtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAg
U3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmcobWVzc2FnZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgcmVzdWx0ID0gaW1wbCgp
LT5zZW5kKHN0cmluZ01lc3NhZ2UsIGVjKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBKU1ZhbHVlIEpT
V2ViU29ja2V0OjpjbG9zZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICB4ID0gY2xhbXBUbyh4
LCBtaW5WYWx1ZSwgbWF4VmFsdWUpOwogICAgICAgICBjb2RlID0gY2xhbXBUb0ludGVnZXIoeCk7
CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgICAgIHJlYXNvbiA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgICAgICByZWFzb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewogICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJS
KTsKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIEpTVmFs
dWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEUKIAogICAgIFZlY3RvcjxTdHJpbmc+
IHVybHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgaSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudChpKS50b1N0cmluZyhleGVjKSkpOworICAgICAgICB1cmxzLmFwcGVuZCh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uCiAgICAgaWYgKCFl
eGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFVT
dHJpbmcgc2NyaXB0VVJMID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzY3JpcHRVUkwgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAx
MDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOCArODUsOCBAQCBKU1ZhbHVlIEpTWE1MSHR0
cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4
ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIGNvbnN0IEtVUkwmIHVybCA9IGlt
cGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb21wbGV0ZVVSTCh1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBTdHJpbmcgbWV0aG9k
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29t
cGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpOworICAgIFN0cmluZyBtZXRob2QgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewpA
QCAtMTI5LDcgKzEyOSw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3Rh
dGUKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8p
KQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFsKSwgZWMpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBpbXBsKCktPnNlbmQodXN0cmluZ1RvU3RyaW5nKHZhbC50
b1N0cmluZyhleGVjKSksIGVjKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh1c3RyaW5nVG9T
dHJpbmcodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGVjKTsKICAgICB9CiAKICAg
ICBpbnQgc2lnbmVkTGluZU51bWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksOSArODksOSBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6
c2V0UGFyYW1ldGVyKEV4CiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcg
bmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1l
c3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3Ry
aW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaW1wbCgpLT5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTEw
MCw4ICsxMDAsOCBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4CiB7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBs
b2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhl
YykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxO
YW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CiAgICAgU3RyaW5nIHZhbHVlID0gaW1wbCgpLT5nZXRQYXJhbWV0ZXIobmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKGV4
ZWMsIHZhbHVlKTsKIH0KQEAgLTExMCw4ICsxMTAsOCBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nv
cjo6cmVtb3ZlUGFyYW1ldGVyCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBu
YW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaW1wbCgpLT5yZW1vdmVQYXJh
bWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NP
d25QdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3QKICAgICBpZiAoZ2V0Q2FsbERhdGEo
diwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICBpZiAocG9saWN5ICYmICFw
b2xpY3ktPmFsbG93RXZhbCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzdHJp
bmcgPSB2LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2NoZWR1bGVkQWN0aW9uKHVzdHJpbmdUb1N0cmluZyhzdHJpbmcpLCBp
c29sYXRlZFdvcmxkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRF
dmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw3ICsxMDMsOCBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3Vt
ZW50CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rp
b24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwot
ICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoanNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3Rh
dGVGcm9tTm9kZShqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCksIGRvY3VtZW50KSkpOworICAg
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbU5vZGUoanNMaXN0ZW5l
ci0+aXNvbGF0ZWRXb3JsZCgpLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmlu
Zyhqc0Z1bmN0aW9uLT50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKSk7
CiB9CiAKIGJvb2wgZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWVudCogZG9jdW1l
bnQsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIFN0cmluZyYgc291cmNlTmFtZSwgaW50
JiBsaW5lTnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIAogU3RyaW5nIFNjcmlwdFZhbHVlOjp0
b1N0cmluZyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJl
c3VsdCA9IHVzdHJpbmdUb1N0cmluZyhtX3ZhbHVlLmdldCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRl
KSk7CisgICAgU3RyaW5nIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmluZyhtX3ZhbHVlLmdldCgpLnRv
U3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpKTsKICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9raW5n
IHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCiAgICAgaWYgKHNjcmlwdFN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgc2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMTA1NjU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBFTkQKICAg
ICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5l
ci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRv
bWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1
cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50
b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIo
dXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
JHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQdHJIYW5k
bGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogRU5ECiAgICAgcmV0dXJuIEBHZW5lcmF0ZUV2
ZW50TGlzdGVuZXJJbXBsOwpAQCAtMjkxMiw3ICsyOTEyLDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2
ZQogICAgIGlmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICByZXR1cm4gInZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9IHx8ICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CiAgICAgICAgIHJldHVybiAidmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkc2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0
cmluZyJ9OwotICAgICAgICByZXR1cm4gInVzdHJpbmdUb1N0cmluZygkdmFsdWUuaXNFbXB0eSgp
ID8gVVN0cmluZygpIDogJHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSI7CisgICAgICAgIHJldHVybiAi
dXN0cmluZ1RvU3RyaW5nKCR2YWx1ZS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiAkdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJE
T01PYmplY3QiKSB7CkBAIC0zNDkyLDcgKzM0OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7Y29uc3RydWN0CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwog
Ci0gICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlw
ZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS90ZXN0YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyAr
MzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlIGV4VmFsID0gY29tcC52YWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBjaGFyICptc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS5hc2NpaSgpOworICAgICAg
ICAgICAgICAgICAgICBjaGFyKiBtc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykuYXNjaWkoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IC0xOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhWYWwudHlwZSgpID09IE9iamVjdFR5cGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlIGxpbmVWYWwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFs
KS5nZXQoZXhlYyxJZGVudGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3Rlc3RxdGJpbmRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvdGVzdHF0YmluZGluZ3MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvdGVzdHF0YmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgaWYgKGNv
bXAuY29tcGxUeXBlKCkgPT0gVGhyb3cpIHsKICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAi
ZXhjZXB0aW9uIHRocm93biI7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSogZXhWYWwgPSBjb21w
LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5nKGV4
ZWMpLmFzY2lpKCk7CisgICAgICAgICAgICAgICAgY2hhciogbXNnID0gZXhWYWwtPnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8g
PSAtMTsKICAgICAgICAgICAgICAgICBpZiAoZXhWYWwtPnR5cGUoKSA9PSBPYmplY3RUeXBlKSB7
CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUqIGxpbmVWYWwgPSBleFZhbC0+Z2V0T2JqZWN0
KCktPmdldChleGVjLCBJZGVudGlmaWVyKCJsaW5lIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICBWT0lEX1RPX05QVkFS
SUFOVCgqcmVzdWx0KTsKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFVT
dHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHVz
dHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIENTdHJp
bmcgY3N0cmluZyA9IHVzdHJpbmcudXRmOCgpOwogICAgICAgICBOUFN0cmluZyBzdHJpbmcgPSB7
IChjb25zdCBOUFVURjgqKWNzdHJpbmcuZGF0YSgpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3N0
cmluZy5sZW5ndGgoKSkgfTsKICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmlu
Z0NvcHkocmVzdWx0LCAmc3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg4LDcgKzQ4OCw3IEBA
IGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICAgICAgICAgIHJl
c3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRv
dWJsZSl2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigp
OwogICAgICAgICByZXN1bHQgPSBlbnYtPk5ld1N0cmluZyAoKGNvbnN0IGpjaGFyICopc3RyaW5n
VmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAgfSBlbHNlIGlm
ICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTA1NjU2KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXYKICAgICAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmlu
ZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0u
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBlbnYtPlNl
dE9iamVjdEFycmF5RWxlbWVudChqYXJyYXksIGksCiAgICAgICAgICAgICAgICAgICAgICAgICBl
bnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUu
Y2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0ph
dgogICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShs
ZW5ndGgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4
ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCgpID4gMCkKICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSAoKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCkp
WzBdOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVj
U3RhdGUqIGUKICAgICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIG51bGwuCiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5T
dHJpbmciKSkgewogICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOwogICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBl
bnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5j
aGFyYWN0ZXJzKCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmwgPSBqYXZhU3RyaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YUZpZWxkSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhRmllbGRKU0MuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgZGlz
cGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0
YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25E
ZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24u
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgSlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKEV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBMT0coTGl2ZUNvbm5lY3Qs
ICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmco
bmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNj
aWkoKS5kYXRhKCkpOworICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6dmFsdWVGcm9t
SW5zdGFuY2UgZ2V0dGluZyAlcyA9ICVzIiwgVVN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCku
ZGF0YSgpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRh
KCkpOwogCiAgICAgcmV0dXJuIGpzcmVzdWx0OwogfQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQg
SmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW4KICAgICAgICAgICAgICAgICBhcmdz
WzFdID0gamF2YVZhbHVlOwogICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCBy
b290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCBKYXZhVHlw
ZVZvaWQsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xODMsNyAr
MTgzLDcgQEAgdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGNv
bnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFu
Y2UqPihpKTsKICAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhl
YywgaS0+cm9vdE9iamVjdCgpLCBhVmFsdWUsIG1fdHlwZSwgdHlwZUNsYXNzTmFtZSgpKTsKIAot
ICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlIHNldHRp
bmcgdmFsdWUgJXMgdG8gJXMiLCBVU3RyaW5nKG5hbWUoKS5pbXBsKCkpLnV0ZjgoKS5kYXRhKCks
IGFWYWx1ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgTE9HKExpdmVDb25u
ZWN0LCAiSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAl
cyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgSmF2YVR5cGVBcnJheToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gMTA1NjU2KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1MKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAg
ICBDU3RyaW5nIGphdmFDbGFzc05hbWUgPSBqTWV0aG9kLT5wYXJhbWV0ZXJBdChpKS51dGY4KCk7
CiAgICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgbV9yb290T2Jq
ZWN0LmdldCgpLCBleGVjLT5hcmd1bWVudChpKSwgamF2YVR5cGVGcm9tQ2xhc3NOYW1lKGphdmFD
bGFzc05hbWUuZGF0YSgpKSwgamF2YUNsYXNzTmFtZS5kYXRhKCkpOwotICAgICAgICBMT0coTGl2
ZUNvbm5lY3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBl
eGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IExPRyhMaXZlQ29ubmVjdCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAl
cyIsIGksIGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAganZhbHVlIHJlc3VsdDsKQEAgLTIxNCw3ICsyMTQs
NyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAgICAgICAgIGpt
ZXRob2RJRCBtZXRob2RJZCA9IGdldE1ldGhvZElEKG9iaiwgak1ldGhvZC0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCksIGpNZXRob2QtPnNpZ25hdHVyZSgpKTsKICAgICAgICAgaGFuZGxlZCA9IGRpc3Bh
dGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9k
LT5pc1N0YXRpYygpLCBqTWV0aG9kLT5yZXR1cm5UeXBlKCksIG1ldGhvZElkLCBqQXJncy5kYXRh
KCksIHJlc3VsdCwgY2FsbGluZ1VSTCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICBp
ZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpKTsK
KyAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9u
RGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDcg
KzM0Myw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2OwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKHN0
ci5sZW5ndGgoKSA/ICooY29uc3QgdXNob3J0KilzdHIuaW1wbCgpLT5jaGFyYWN0ZXJzKCkgOiAw
KSk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMzsKQEAgLTM1OCw3ICszNTgsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0
IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQogICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMDsKQEAgLTQzOSw3ICs0MzksNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExl
bmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFy
cmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0
cmluZyA9IHZhbC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1w
bCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CkBAIC00NTMsNyArNDUzLDcgQEAgUVZhcmlhbnQg
Y29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIGludCBsZW4g
PSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQo
ZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBx
c3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocXN0cmluZyk7CkBAIC00NjIsNyArNDYyLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9R
VmFyaWFudChFeGVjU3RhdAogICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUg
bGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1
c3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKQEAgLTQ3OCw3ICs0NzgsNyBA
QCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQoUUJ5dGVBcnJheShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihhcnItPmRhdGEoKSksIGFyci0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICBkaXN0ID0g
MDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFj
dGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKS50b0xhdGluMSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwpAQCAtNTIx
LDcgKzUyMSw3IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAg
ICAgICAgICAgICAgICB9CiAjaWZuZGVmIFFUX05PX0RBVEVTVFJJTkcKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJp
bmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJp
bmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAg
UVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5j
aGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGhp
bnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKQEAgLTU3MSw3ICs1NzEsNyBAQCBRVmFyaWFu
dCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgUmVnRXhw
T2JqZWN0ICpyZSA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KG9iamVjdCk7CiAqLwogICAg
ICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gY29udmVydC4uIGEgYml0IHJpc2t5Ci0gICAgICAg
ICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
ICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFD
aGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKIAog
ICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgb2YgdGhlIGZvcm0gJy94eHh4eHgvaScKQEAgLTU5
MSw3ICs1OTEsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAg
ICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyBy
ZWdleHAiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5n
ID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVz
dHJpbmcubGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsK
QEAgLTE1OTksNyArMTU5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc09iajsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgaXQgdG8gYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgZnVuY05h
bWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVTdHJpbmcgZnVuY05hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJ
ZGVudChleGVjLCBmdW5jTmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBE
cm9wQWxsTG9ja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHND
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRl
cm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCB2b2lkIEpTSW50ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhCiAgICAgVmVjdG9y
PFN0cmluZz4gbGFuZ3VhZ2VzOwogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgo
aSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB1c3RyaW5nVG9T
dHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgICAgIGxhbmd1YWdlcy5hcHBlbmQobGFuZ3VhZ2UpOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTIzICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQg
cmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQgb2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBjYWxs
IHZhbHVlKCkgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZygpLCB0bworICAgICAgICBjb252ZXJ0IGZy
b20gIkpTIHN0cmluZyIgKEpTU3RyaW5nKikgdG8gIkMrKyBzdHJpbmciIChVU3RyaW5nKSwgc2lu
Y2UKKyAgICAgICAgdG9TdHJpbmcoKSBubyBsb25nZXIgcmV0dXJucyBhICJDKysgc3RyaW5nIi4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1Zh
bHVlVG9OUFZhcmlhbnQpOgorCiAyMDEyLTAxLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFdlYktpdDIgcmVtZW1iZXIgdGhlIGhlaWdodCBv
ZiB0aGUgV2ViIEluc3BlY3RvciB3aGVuIGl0IGlzIGRvY2tlZC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpj
b252ZXJ0SlNWYWx1ZVQKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICBOUFN0cmluZyBucFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLnV0ZjgoKSk7CisgICAgICAgIE5QU3RyaW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0ZjgoKSk7CiAgICAgICAgIFNUUklO
R05fVE9fTlBWQVJJQU5UKG5wU3RyaW5nLlVURjhDaGFyYWN0ZXJzLCBucFN0cmluZy5VVEY4TGVu
Z3RoLCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfZnJhbWUuY3BwCShyZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDcgKzQzNiw4IEBAIGNo
YXIqIGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZShFdmFzX09iamUKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAg
ICByZXN1bHRTdHJpbmcgPSBXZWJDb3JlOjp1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5n
KHNtYXJ0RGF0YS0+ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoV2ViQ29yZTo6bWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoV2ViQ29yZTo6
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgcmVzdWx0U3RyaW5n
ID0gV2ViQ29yZTo6dXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgIHJldHVybiBzdHJkdXAocmVzdWx0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwog
I2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gMTA1NjU2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFw
cGxlLmNvbT4KKworICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBK
U1N0cmluZyogaW5zdGVhZCBvZiBhIFVTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGNhbGwgdmFsdWUoKSBh
ZnRlciBjYWxsaW5nIHRvU3RyaW5nKCksIHRvCisgICAgICAgIGNvbnZlcnQgZnJvbSAiSlMgc3Ry
aW5nIiAoSlNTdHJpbmcqKSB0byAiQysrIHN0cmluZyIgKFVTdHJpbmcpLCBzaW5jZQorICAgICAg
ICB0b1N0cmluZygpIG5vIGxvbmdlciByZXR1cm5zIGEgIkMrKyBzdHJpbmciLgorCisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0
cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisKIDIwMTItMDEtMjAgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgUnVuTG9v
cCB3b3JrIGZvciBXZWJLaXQxCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShy
ZXZpc2lvbiAxMDU2NTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNTgsNyArMTI1
OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWwKIAogICAgIGlm
ICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKV07CisgICAgICAgIFthcnJh
eSBhZGRPYmplY3Q6dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSldOwogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OkRvdWJsZVZhbHVlVHlwZV1dOwog
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVl
LnRvTnVtYmVyKGV4ZWMpXV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0JKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsOCBAQCAtIChOU1N0cmluZyAqKV9z
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgICAgIHJldHVybiBAIiI7CiAKICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiB1c3RyaW5nVG9TdHJp
bmcocmVzdWx0LnRvU3RyaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgcmV0dXJu
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0K
IAogLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBQb3NpdGlvbiYpcG9zIGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CkBAIC0xMTkxLDcgKzExOTIsOCBA
QCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgICAgIHJldHVy
biBAIiI7CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJl
dHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGFueVdvcmxkR2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCkpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIAogLSAoSlNHbG9iYWxDb250ZXh0
UmVmKV9nbG9iYWxDb250ZXh0Rm9yU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDEwNTY1NikKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwNCw3ICsyNjA0LDgg
QEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YQogICAgICAgICByZXR1
cm4gU19PSzsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
U3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoYW55
V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBTdHJpbmcgcmVz
dWx0U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgICpldmFsdWF0aW9uUmVzdWx0ID0gQlN0cmluZyhyZXN1bHRTdHJpbmcpLnJl
bGVhc2UoKTsKIAogICAgIHJldHVybiBTX09LOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123789</attachid>
            <date>2012-01-24 13:06:09 -0800</date>
            <delta_ts>2012-01-24 13:43:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76861-20120124130608.patch</filename>
            <type>text/plain</type>
            <size>3931</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1Nzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTAxLTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgSlNWYWx1ZTo6dG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIGEgSlNTdHJpbmcqIGluc3RlYWQg
b2YgYSBVU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njg2MQorCisgICAgICAgIEZpeGVkIHR3byBmYWlsaW5nIGxheW91dCB0ZXN0cyBhZnRl
ciBteSBsYXN0IHBhdGNoLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jU29ydCk6IENhbGwgdmFsdWUoKSBhZnRlciBjYWxsaW5nIHRvU3RyaW5nKCks
IGFzCisgICAgICAgIGluIGFsbCBvdGhlciBjYXNlcy4KKyAgICAgICAgCisgICAgICAgIEkgbWlz
c2VkIHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBKU1N0cmluZyogdHlwZSBoYXMgYSB2YWxpZCBvcGVy
YXRvcjwsCisgICAgICAgIHNvIHRoZSBjb21waWxlciBkaWRuJ3QgY29tcGxhaW4uCisKIDIwMTIt
MDEtMjQgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtWOF0gQWRkIFVpbnQ4Q2xhbXBlZEFycmF5IHN1cHBvcnQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNTY5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcxLDcgKzU3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgICAgICBsLmFwcGVuZChtaW5PYmopOwogICAg
ICAgICAgICAgICAgIGNvbXBhcmVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGwpLnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGFyZVJlc3VsdCA9IChqT2JqLnRvU3RyaW5n
KGV4ZWMpIDwgbWluT2JqLnRvU3RyaW5nKGV4ZWMpKSA/IC0xIDogMTsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlUmVzdWx0ID0gKGpPYmoudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIDwgbWlu
T2JqLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkgPyAtMSA6IDE7CiAKICAgICAgICAgICAg
IGlmIChjb21wYXJlUmVzdWx0IDwgMCkgewogICAgICAgICAgICAgICAgIHRoZW1pbiA9IGo7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMDU3NjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0yNCAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEpTVmFsdWU6OnRvU3RyaW5nKCkgc2hvdWxkIHJl
dHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgdW5pdCB0ZXN0IGZv
ciBzb21ldGhpbmcgSSBnb3Qgd3Jvbmcgd2hpbGUgd3JpdGluZyB0aGlzIHBhdGNoLgorCisgICAg
ICAgICogZmFzdC9qcy9hZGQtdG8tcHJpbWl0aXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9hZGQtdG8tcHJpbWl0aXZlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTI0
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU2ltaWxhciB0byB0
aGUgY2hhbmdlIGJlbG93LCB0aGlzIHBhdGNoIGNyZWF0ZXMgQ2hyb21pdW0gTWFjIHNwZWNpZmlj
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FkZC10by1wcmltaXRpdmUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYWRkLXRvLXByaW1pdGl2ZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FkZC10by1wcmlt
aXRpdmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgcGFn
ZSB0ZXN0cyB0aGF0IHN0cmluZyBhZGRpdGlvbiBwcmVmZXJzIHZhbHVlT2YoKSBvdmVyIHRvU3Ry
aW5nKCkgZm9yIGNvbnZlcnNpb24uIElmIHRoZSB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBB
U1MgbWVzc2FnZSBiZWxvdy4KKworUEFTUzogJzEnICsgdmFsdWVPZklzWmVybyBzaG91bGQgYmUg
MTAgYW5kIGlzLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FkZC10by1wcmltaXRpdmUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2FkZC10by1wcmltaXRpdmUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYWRkLXRvLXByaW1pdGl2
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACis8cD5UaGlzIHBhZ2UgdGVzdHMg
dGhhdCBzdHJpbmcgYWRkaXRpb24gcHJlZmVycyB2YWx1ZU9mKCkgb3ZlciB0b1N0cmluZygpIGZv
ciBjb252ZXJzaW9uLiBJZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3Nh
Z2UgYmVsb3cuPC9wPgorCis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKworPHNjcmlwdD4KK2Z1
bmN0aW9uIGxvZyhzKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIpKTsKK30KKworZnVu
Y3Rpb24gc2hvdWxkQmUoYSwgYURlc2NyaXB0aW9uLCBiKQoreworICAgIGlmIChhID09PSBiKQor
ICAgICAgICBsb2coIlBBU1M6ICIgKyBhRGVzY3JpcHRpb24gKyAiIHNob3VsZCBiZSAiICsgYiAr
ICIgYW5kIGlzLiIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgYURlc2NyaXB0
aW9uICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGJ1dCBpbnN0ZWFkIGlzICIgKyBhICsgIi4iKTsK
K30KKworaWYgKHRoaXMubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIAordmFyIHZhbHVlT2ZJc1plcm8gPSB7CisgICAgdmFs
dWVPZjogZnVuY3Rpb24gdmFsdWVPZigpIHsgcmV0dXJuIDA7IH0sCisgICAgdG9TdHJpbmc6IGZ1
bmN0aW9uIHRvU3RyaW5nKCkgeyByZXR1cm4gMTsgfQorfTsKKworc2hvdWxkQmUoJzEnICsgdmFs
dWVPZklzWmVybywgIicxJyArIHZhbHVlT2ZJc1plcm8iLCAiMTAiKTsKKworPC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="124907"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="124915"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>