<?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>68593</bug_id>
          
          <creation_ts>2011-09-21 23:21:39 -0700</creation_ts>
          <short_desc>DFG JIT should infer which uses of a variable are not aliased</short_desc>
          <delta_ts>2011-09-29 16:17:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68677</dependson>
    
    <dependson>68763</dependson>
    
    <dependson>68784</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471370</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 23:21:39 -0700</bug_when>
    <thetext>Say you write the following program:

var i;

for (i = 0; i &lt; n; ++i) {
    array[i]++;
}

i = 0.5;

Currently, the DFG will assume that &apos;i&apos; is always both Int and Double, which will cause the first loop to perform very poorly.  This problem is made worse by the bytecode generator&apos;s reuse of virtual registers for variables that are lexically unrelated.

The DFG should be fixed so that it does not get confused by this, particularly since a simple algorithm exists for fixing it.  Start by assuming that each GetLocal, SetLocal, and Phi operates on a distinct variable (even if it obviously doesn&apos;t).  Then for each GetLocal, SetLocal and Phi, union its variable with the variables of its children.

At the end, each union-find set will correspond to a disjoint live-range of a variable.  In many cases, it will correspond precisely (one-to-one) to a virtual register, while in other cases it will be many-to-one: for any virtual register, each distinct use will have a different &quot;variable&quot;.

This implies that SetLocal/GetLocal will have two OpInfo slots: the virtual register (slot one, as it is now) and the variable number used for predictions and static analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471991</commentid>
    <comment_count>1</comment_count>
      <attachid>108434</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 18:00:52 -0700</bug_when>
    <thetext>Created attachment 108434
the patch

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472966</commentid>
    <comment_count>2</comment_count>
      <attachid>108625</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-25 21:15:23 -0700</bug_when>
    <thetext>Created attachment 108625
the patch after merging

Still a work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472970</commentid>
    <comment_count>3</comment_count>
      <attachid>108626</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-25 22:04:42 -0700</bug_when>
    <thetext>Created attachment 108626
more work in progress

I&apos;m starting to have a story for live range splitting, but it&apos;s incomplete and probably broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473507</commentid>
    <comment_count>4</comment_count>
      <attachid>108748</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-26 16:18:22 -0700</bug_when>
    <thetext>Created attachment 108748
more work in progress

We can now split live ranges, but we don&apos;t use this information for anything, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473716</commentid>
    <comment_count>5</comment_count>
      <attachid>108794</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-26 23:50:53 -0700</bug_when>
    <thetext>Created attachment 108794
starting to work

This has live range splitting using union-find alias analysis.  It seems to work, and seems to do the right thing.  Still testing it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474257</commentid>
    <comment_count>6</comment_count>
      <attachid>108904</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 14:53:29 -0700</bug_when>
    <thetext>Created attachment 108904
the patch

This undoes a 2% speed-up that I had seen on my laptop, but that was not seen on arewefastyet.com.  I investigated this to death, and found that the DFG does exactly the same thing, in exactly the same order, on the benchmark that has the 14% fluctuation.  Compile time is definitely not an issue.  I&apos;m guessing that the fluctuation that I had seen (14% win after getting rid of static predictions, and a 14% slow-down with this patch) was just some kind of systematic noise and I&apos;m inclined to ignore it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474259</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 14:57:43 -0700</bug_when>
    <thetext>Attachment 108904 did not pass style-queue:

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

Source/JavaScriptCore/dfg/DFGGraph.h:328:  The parameter name &quot;variableAccessData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:167:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474260</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 14:58:01 -0700</bug_when>
    <thetext>It should be noted that this patch significantly ruggedizes our tiered compilation:

- Previously OSR entry would verify a prediction at the head of a basic block even if the variable was dead at the head, because it had no way of distinguishing between a variable being dead at the tail or dead at the head (if it was live at either, it would assume it was live at both).

- Previously if a virtual register was reused for a different purpose in the middle of a function, we would get mixed predictins between the different uses of the variable.  Now we get separate predictions.

It also serves as a stepping stone for two other improvements:

- Currently we do not consider flow sensitivity for variable predictions.  This patch does not do this yet, but gives us a facility for doing so, by separating how a variable is stored (i.e. its virtual register) from how it&apos;s predicted.

- Currently if we tried to do inlining of two functions that have different types in their variables (which is almost certainly going to be the case if they are different functions) then the predictions will get mixed.  This patch ensures that once we implement inlining, we will not mix predictions just because the variables got assigned the same virtual registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474263</commentid>
    <comment_count>9</comment_count>
      <attachid>108907</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 14:59:47 -0700</bug_when>
    <thetext>Created attachment 108907
the patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474271</commentid>
    <comment_count>10</comment_count>
      <attachid>108909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 15:06:52 -0700</bug_when>
    <thetext>Created attachment 108909
the patch - fix changelog

Updated the ChangeLog, since in the previous patches it still said that this was a work in progress (it&apos;s not).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474484</commentid>
    <comment_count>11</comment_count>
      <attachid>108960</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 21:43:21 -0700</bug_when>
    <thetext>Created attachment 108960
the patch - attempt to fix windows, merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474492</commentid>
    <comment_count>12</comment_count>
      <attachid>108961</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 22:05:15 -0700</bug_when>
    <thetext>Created attachment 108961
the patch - more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474500</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 22:28:56 -0700</bug_when>
    <thetext>Fixed some stuff.  Now it&apos;s totally neutral.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;LiveRangeSplit&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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.

                                            TipOfTree             LiveRangeSplit                                 
SunSpider:
   3d-cube                                7.6922+-0.1988    ?     7.7205+-0.2574       ?
   3d-morph                               7.5029+-0.1592          7.4454+-0.2336       
   3d-raytrace                            8.2500+-0.2146    ?     8.4582+-0.2255       ? might be 1.0252x slower
   access-binary-trees                    2.1528+-0.1100          2.1172+-0.1243         might be 1.0168x faster
   access-fannkuch                        6.2283+-0.0899    ?     6.4395+-0.1506       ? might be 1.0339x slower
   access-nbody                           3.6747+-0.0747    ?     3.6900+-0.1150       ?
   access-nsieve                          2.5620+-0.0497    ?     2.6403+-0.0766       ? might be 1.0306x slower
   bitops-3bit-bits-in-byte               1.7323+-0.0467          1.7322+-0.0522       
   bitops-bits-in-byte                    2.7092+-0.0460    ?     2.7689+-0.0710       ? might be 1.0221x slower
   bitops-bitwise-and                     3.5607+-0.1322          3.4690+-0.0751         might be 1.0264x faster
   bitops-nsieve-bits                     5.5097+-0.1361          5.4230+-0.1047         might be 1.0160x faster
   controlflow-recursive                  2.0410+-0.0514    ?     2.0848+-0.0459       ? might be 1.0215x slower
   crypto-aes                             6.3633+-0.1242    ?     6.4963+-0.2182       ? might be 1.0209x slower
   crypto-md5                             2.8494+-0.1204          2.7613+-0.0634         might be 1.0319x faster
   crypto-sha1                            2.5110+-0.0591          2.5104+-0.0746       
   date-format-tofte                     10.0627+-0.3360    ?    10.2101+-0.3020       ? might be 1.0147x slower
   date-format-xparb                      9.5168+-0.1626    ?     9.6750+-0.2667       ? might be 1.0166x slower
   math-cordic                            6.3692+-0.0948          6.3406+-0.1316       
   math-partial-sums                      8.0563+-0.1988          7.8165+-0.2004         might be 1.0307x faster
   math-spectral-norm                     2.9357+-0.1066          2.8295+-0.0678         might be 1.0375x faster
   regexp-dna                            10.8642+-0.2494    ?    11.0709+-0.2275       ? might be 1.0190x slower
   string-base64                          5.9855+-0.3214          5.7881+-0.1345         might be 1.0341x faster
   string-fasta                           7.1136+-0.1528    ?     7.2783+-0.2611       ? might be 1.0231x slower
   string-tagcloud                       11.7383+-0.2994    ?    12.2077+-0.3409       ? might be 1.0400x slower
   string-unpack-code                    21.5002+-0.7005    ?    21.5974+-0.3771       ?
   string-validate-input                  6.5260+-0.2503          6.3355+-0.1992         might be 1.0301x faster

   &lt;arithmetic&gt;                           6.3849+-0.0276    ?     6.4195+-0.0282       ?
   &lt;geometric&gt;                            5.2580+-0.0177    ?     5.2671+-0.0246       ?
   &lt;harmonic&gt;                             4.3333+-0.0238          4.3310+-0.0326       

                                            TipOfTree             LiveRangeSplit                                 
V8:
   crypto                                71.7616+-1.0628         71.1205+-0.3344       
   deltablue                            228.1658+-0.7650    ?   231.5297+-2.8410       ? might be 1.0147x slower
   earley-boyer                          89.8243+-0.5228    ?    89.8258+-0.5621       ?
   raytrace                              62.2547+-0.7894    ?    63.6586+-0.9188       ? might be 1.0226x slower
   regexp                               106.3893+-1.0650        105.9907+-1.6466       
   richards                             198.1538+-0.8433    !   200.9998+-1.5931       ! definitely 1.0144x slower
   splay                                 96.5465+-0.8717    ^    95.0097+-0.4065       ^ definitely 1.0162x faster

   &lt;arithmetic&gt;                         121.8709+-0.3295    ?   122.5907+-0.6098       ?
   &lt;geometric&gt;                          109.2908+-0.4012    ?   109.6402+-0.4618       ?
   &lt;harmonic&gt;                            99.5289+-0.4996    ?    99.7573+-0.4226       ?

                                            TipOfTree             LiveRangeSplit                                 
Kraken:
   ai-astar                             499.2630+-5.3220        495.1316+-4.8329       
   audio-beat-detection                 207.5893+-2.3626        205.4705+-1.9525         might be 1.0103x faster
   audio-dft                            425.4155+-5.1167    ?   439.0691+-16.9925      ? might be 1.0321x slower
   audio-fft                            139.5907+-0.8042    ?   141.1493+-1.4043       ? might be 1.0112x slower
   audio-oscillator                     257.4750+-3.5507    ?   257.8873+-2.2155       ?
   imaging-darkroom                     440.2766+-4.1131    ^   426.5286+-6.2953       ^ definitely 1.0322x faster
   imaging-desaturate                   224.8910+-1.3828    ?   228.9449+-7.2459       ? might be 1.0180x slower
   imaging-gaussian-blur                586.4749+-4.4782        586.4513+-4.4580       
   json-parse-financial                  48.5181+-0.6663    ?    48.7977+-0.7105       ?
   json-stringify-tinderbox              68.7911+-0.6904    ^    67.5631+-0.5023       ^ definitely 1.0182x faster
   stanford-crypto-aes                  134.0193+-1.6182    ?   135.1391+-0.7355       ?
   stanford-crypto-ccm                  105.1607+-0.7178    ^   103.1710+-0.7521       ^ definitely 1.0193x faster
   stanford-crypto-pbkdf2               202.8855+-0.9739    ^   200.2139+-0.8190       ^ definitely 1.0133x faster
   stanford-crypto-sha256-iterative      84.8164+-0.9626    ?    85.4529+-1.3834       ?

   &lt;arithmetic&gt;                         244.6548+-0.6791        244.3550+-1.4587       
   &lt;geometric&gt;                          189.0306+-0.6238        188.7703+-0.9134       
   &lt;harmonic&gt;                           143.5915+-0.7115        143.3510+-0.7654       

                                            TipOfTree             LiveRangeSplit                                 
All benchmarks:
   &lt;arithmetic&gt;                          94.5590+-0.2062    ?    94.5960+-0.3798       ?
   &lt;geometric&gt;                           24.0152+-0.0550    ?    24.0395+-0.0798       ?
   &lt;harmonic&gt;                             7.6202+-0.0407          7.6162+-0.0558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474505</commentid>
    <comment_count>14</comment_count>
      <attachid>108964</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 22:31:31 -0700</bug_when>
    <thetext>Created attachment 108964
the patch

This is now performance neutral.  It turns out ConvertThis had wrong prediction logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474515</commentid>
    <comment_count>15</comment_count>
      <attachid>108968</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 22:57:38 -0700</bug_when>
    <thetext>Created attachment 108968
the patch

fixed merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474549</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-28 00:02:25 -0700</bug_when>
    <thetext>Updated numbers after merging with https://bugs.webkit.org/show_bug.cgi?id=68580

Conclusion: it&apos;s netural.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;LiveRangeSplit&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 15 samples per benchmark/VM, with 5 VM invocations per benchmark. 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.

                                            TipOfTree             LiveRangeSplit                                 
SunSpider:
   3d-cube                                7.6787+-0.3039          7.4757+-0.2208         might be 1.0271x faster
   3d-morph                               7.3829+-0.1321    ?     7.4831+-0.1374       ? might be 1.0136x slower
   3d-raytrace                            8.2394+-0.2402    ?     8.4595+-0.3011       ? might be 1.0267x slower
   access-binary-trees                    2.0714+-0.0659    ?     2.1538+-0.0820       ? might be 1.0398x slower
   access-fannkuch                        6.4854+-0.1156          6.4094+-0.1069         might be 1.0119x faster
   access-nbody                           3.6724+-0.0718          3.6551+-0.0791       
   access-nsieve                          2.6425+-0.0768          2.6057+-0.0687         might be 1.0141x faster
   bitops-3bit-bits-in-byte               1.6955+-0.0423    ?     1.7364+-0.0360       ? might be 1.0241x slower
   bitops-bits-in-byte                    2.7285+-0.0482    ?     2.7671+-0.0680       ? might be 1.0141x slower
   bitops-bitwise-and                     3.4507+-0.0774          3.3981+-0.0622         might be 1.0155x faster
   bitops-nsieve-bits                     5.4244+-0.1194    ?     5.4386+-0.1020       ?
   controlflow-recursive                  2.0497+-0.0537    ?     2.0617+-0.0333       ?
   crypto-aes                             6.6114+-0.1880    ?     6.6872+-0.1737       ? might be 1.0115x slower
   crypto-md5                             2.7668+-0.0747    ?     2.8010+-0.0668       ? might be 1.0124x slower
   crypto-sha1                            2.4589+-0.0671    ?     2.4827+-0.0555       ?
   date-format-tofte                     10.4541+-0.4384         10.0867+-0.2541         might be 1.0364x faster
   date-format-xparb                      9.6846+-0.2358          9.6279+-0.2417       
   math-cordic                            6.3572+-0.1142    ?     6.5219+-0.1184       ? might be 1.0259x slower
   math-partial-sums                      7.5899+-0.1042          7.5543+-0.1343       
   math-spectral-norm                     2.8221+-0.0534    ?     2.8413+-0.0906       ?
   regexp-dna                            10.9369+-0.2158         10.8010+-0.2099         might be 1.0126x faster
   string-base64                          6.0534+-0.1700          5.9570+-0.1248         might be 1.0162x faster
   string-fasta                           6.9345+-0.1592    ?     7.1482+-0.2413       ? might be 1.0308x slower
   string-tagcloud                       11.8804+-0.2679         11.8612+-0.2276       
   string-unpack-code                    21.3751+-0.4629    ?    21.3774+-0.3379       ?
   string-validate-input                  6.2531+-0.1936    ?     6.3781+-0.1630       ? might be 1.0200x slower

   &lt;arithmetic&gt;                           6.3731+-0.0272    ?     6.3758+-0.0352       ?
   &lt;geometric&gt;                            5.2286+-0.0153    ?     5.2477+-0.0216       ?
   &lt;harmonic&gt;                             4.2922+-0.0271    ?     4.3243+-0.0223       ?

                                            TipOfTree             LiveRangeSplit                                 
V8:
   crypto                                70.8935+-0.3890    ?    71.2029+-0.2827       ?
   deltablue                            229.9200+-0.9956    ^   227.5736+-0.7179       ^ definitely 1.0103x faster
   earley-boyer                          89.3518+-0.2992    !    90.3557+-0.1945       ! definitely 1.0112x slower
   raytrace                              62.5615+-0.4116    ?    62.8549+-0.3808       ?
   regexp                               104.0308+-0.2646        103.7363+-0.3711       
   richards                             198.6203+-0.7546    ?   198.9464+-0.4766       ?
   splay                                 90.9935+-0.4642    ?    92.3987+-1.6417       ? might be 1.0154x slower

   &lt;arithmetic&gt;                         120.9102+-0.2689    ?   121.0098+-0.2652       ?
   &lt;geometric&gt;                          107.9908+-0.2128    ?   108.3575+-0.2639       ?
   &lt;harmonic&gt;                            98.2147+-0.2025    !    98.7076+-0.2400       ! definitely 1.0050x slower

                                            TipOfTree             LiveRangeSplit                                 
Kraken:
   ai-astar                             490.2591+-3.2305    ?   490.4662+-2.2753       ?
   audio-beat-detection                 191.1469+-0.9371        189.4504+-1.0021       
   audio-dft                            278.5623+-2.1923    ?   278.9677+-1.9053       ?
   audio-fft                            127.7110+-0.9664    ?   127.7116+-0.8813       ?
   audio-oscillator                     256.5281+-1.6728    ?   267.7998+-12.2863      ? might be 1.0439x slower
   imaging-darkroom                     419.4694+-1.8256        418.3243+-0.7219       
   imaging-desaturate                   222.7996+-0.6588    ?   223.5182+-0.7306       ?
   imaging-gaussian-blur                578.0480+-1.4034    !   582.3310+-2.1179       ! definitely 1.0074x slower
   json-parse-financial                  47.6611+-0.1951    ?    47.8559+-0.2437       ?
   json-stringify-tinderbox              69.0243+-0.3084    ^    68.2484+-0.1993       ^ definitely 1.0114x faster
   stanford-crypto-aes                  130.2373+-1.3560        128.9448+-1.1310         might be 1.0100x faster
   stanford-crypto-ccm                  102.6255+-0.4921    ^    99.9854+-0.7414       ^ definitely 1.0264x faster
   stanford-crypto-pbkdf2               194.7292+-1.5753        193.4078+-0.6359       
   stanford-crypto-sha256-iterative      85.3745+-0.4286         84.7869+-0.2958       

   &lt;arithmetic&gt;                         228.1555+-0.4259    ?   228.6999+-0.9140       ?
   &lt;geometric&gt;                          178.6563+-0.2998        178.4558+-0.5838       
   &lt;harmonic&gt;                           138.6943+-0.2527        138.1404+-0.3229       

                                            TipOfTree             LiveRangeSplit                                 
All benchmarks:
   &lt;arithmetic&gt;                          89.4946+-0.1462    ?    89.6731+-0.3029       ?
   &lt;geometric&gt;                           23.4997+-0.0463    ?    23.5510+-0.0669       ?
   &lt;harmonic&gt;                             7.5445+-0.0465    ?     7.5992+-0.0383       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475225</commentid>
    <comment_count>17</comment_count>
      <attachid>109121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-28 22:14:07 -0700</bug_when>
    <thetext>Created attachment 109121
the patch - add 32_64

Added, and tested, support for 32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475738</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 16:17:04 -0700</bug_when>
    <thetext>Landed in r96375.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108434</attachid>
            <date>2011-09-22 18:00:52 -0700</date>
            <delta_ts>2011-09-25 21:15:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>liverangesplit_patch_1.diff</filename>
            <type>text/plain</type>
            <size>25990</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgICogd3Rm
L1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChX
VEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpjbGVhckFs
bCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6
UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om1h
c2spOgorCiAyMDExLTA5LTIyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgRU5BQkxFX0NTU19GSUxURVJTCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gOTU3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDEw
RkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQg
LyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07
CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkQxNzFDMTQyQzBGNUIwMDEx
MTBBMiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNkQxNzE5MTQyQzBGMkYwMDExMTBBMiAvKiBQYWNrZWRJbnRWZWN0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjZEMTcxRDE0MkMwRjYzMDAxMTEwQTIgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkQxNzFCMTQyQzBGNDgw
MDExMTBBMiAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
Ki87IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUz
OTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRp
bmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAg
LTc5Miw2ICs3OTQsOCBAQAogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJl
YWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhy
ZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZEMTcxOTE0MkMwRjJGMDAxMTEwQTIg
LyogUGFja2VkSW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
Y2tlZEludFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZEMTcxQjE0
MkMwRjQ4MDAxMTEwQTIgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2
M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTgwOSw2ICsxODEzLDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0
ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY2RDE3
MTkxNDJDMEYyRjAwMTExMEEyIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAogCQkJCTBGRDgyRjQ5
MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVG
MDBCN0RDMEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFj
ICovLApAQCAtMjMzNSw2ICsyMzQwLDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8q
IGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRjZEMTcxQjE0MkMwRjQ4MDAxMTEwQTIgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywK
IAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJ
CQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJ
MEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI0Mzgs
NiArMjQ0NCw4IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFS
TXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZEMTcxQzE0MkMwRjVCMDAxMTEw
QTIgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZEMTcxRDE0MkMw
RjYzMDAxMTEwQTIgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDgyRjRCMTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRjJCMTQyNkNBNkQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNp
Yy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWN0aW9uYWJsZVByZWRpY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKKyNkZWZpbmUgQWN0
aW9uYWJsZVByZWRpY3Rpb25faAorCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpT
VmFsdWUuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1BhY2tl
ZEludFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQW4gYWN0aW9uYWJsZSBwcmVk
aWN0aW9uIGlzIG9uZSB0aGF0IGlzIGVuZm9yY2VkIG9uIHN0b3JlcyB0byBsb2NhbCB2YXJpYWJs
ZXMKKy8vIGFuZCBhcmd1bWVudHMsIGFuZCB3aGVuIHBhc3NpbmcgYXJndW1lbnRzIHRvIGZ1bmN0
aW9ucy4gVGhlc2UgbXVzdCBiZSByZWNvcmRlZAorLy8gaW4gQ29kZUJsb2NrLgorCitlbnVtIEFj
dGlvbmFibGVQcmVkaWN0aW9uIHsKKyAgICBOb0FjdGlvbmFibGVQcmVkaWN0aW9uLAorICAgIEVu
Zm9yY2VJbnQzMlByZWRpY3Rpb24sCisgICAgRW5mb3JjZUFycmF5UHJlZGljdGlvbiwKKyAgICBF
bmZvcmNlQm9vbGVhblByZWRpY3Rpb24KK307CisKK2lubGluZSBBY3Rpb25hYmxlUHJlZGljdGlv
biBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKK3sKKyAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIHJldHVybiBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOworICAgIAorICAgIGlmIChpc0FycmF5
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VBcnJheVByZWRp
Y3Rpb247CisgICAgCisgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisg
ICAgICAgIHJldHVybiBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb247CisgICAgCisgICAgcmV0dXJu
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Cit9CisKK2lubGluZSBib29sIHZhbHVlT2JleXNQcmVk
aWN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgQWN0aW9uYWJs
ZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRpY3Rpb24pIHsKKyAg
ICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0lu
dDMyKCk7CisKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246CisgICAgICAgIHJldHVy
biBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUpOworCisgICAgY2FzZSBFbmZvcmNlQm9vbGVh
blByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxl
UHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5saW5lIGNv
bnN0IGNoYXIqIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcoQWN0aW9uYWJsZVByZWRpY3Rp
b24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRpY3Rpb24pIHsKKyAgICBjYXNlIEVu
Zm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUludDMyIjsKKyAg
ICAgICAgCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4g
IkVuZm9yY2VBcnJheSI7CisgICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUJvb2xlYW5QcmVkaWN0
aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VCb29sZWFuIjsKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlv
bik7CisgICAgICAgIHJldHVybiAiTm9BY3Rpb25hYmxlUHJlZGljdGlvbiI7CisgICAgfQorfQor
Cit0eXBlZGVmIFBhY2tlZEludFZlY3RvcjxBY3Rpb25hYmxlUHJlZGljdGlvbiwgMj4gQWN0aW9u
YWJsZVByZWRpY3Rpb25WZWN0b3I7CisKK2NsYXNzIEFjdGlvbmFibGVQcmVkaWN0aW9ucyB7Citw
dWJsaWM6CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKCkgeyB9CisKKyAgICBBY3Rpb25hYmxl
UHJlZGljdGlvbnModW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMp
CisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5lbnN1cmVTaXplKG51bUFyZ3VtZW50cyk7Cisg
ICAgICAgIG1fdmFyaWFibGVzLmVuc3VyZVNpemUobnVtVmFyaWFibGVzKTsKKyAgICAgICAgbV9h
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgbV92YXJpYWJsZXMuY2xlYXJBbGwoKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgQWN0aW9u
YWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5zZXQoYXJn
dW1lbnQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gYXJn
dW1lbnQodW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoYXJndW1lbnQgPj0g
bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vQWN0aW9uYWJsZVByZWRp
Y3Rpb247CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5nZXQoYXJndW1lbnQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldFZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlLCBBY3Rpb25hYmxl
UHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFibGVzLnNldCh2YXJpYWJs
ZSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YXJpYWJs
ZSh1bnNpZ25lZCB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIGlmICh2YXJpYWJsZSA+PSBtX3Zh
cmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlv
bjsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdldCh2YXJpYWJsZSk7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGFyZ3VtZW50VXBwZXJCb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJn
dW1lbnRzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHZhcmlhYmxlVXBwZXJCb3VuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIAorICAgIHZvaWQgcGFjaygpCisg
ICAgeworICAgICAgICBwYWNrVmVjdG9yKG1fYXJndW1lbnRzKTsKKyAgICAgICAgcGFja1ZlY3Rv
cihtX3ZhcmlhYmxlcyk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBw
YWNrVmVjdG9yKEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yJiB2ZWN0b3IpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBsYXN0U2V0SW5kZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodmVjdG9yLmdl
dChpKSAhPSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RTZXRJ
bmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9yLnJlc2l6ZShsYXN0U2V0SW5kZXgg
KyAxKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3IgbV9hcmd1
bWVudHM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3IgbV92YXJpYWJsZXM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDk1NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsOSArMjQwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgp
OyB9CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7
IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQogICAgICAgICAKLSAgICAgICAgdm9p
ZCBzZXRQcmVkaWN0aW9ucyhQYXNzT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9u
cykgeyBtX3ByZWRpY3Rpb25zID0gcHJlZGljdGlvbnM7IH0KLSAgICAgICAgUHJlZGljdGlvblRy
YWNrZXIqIHByZWRpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXQoKTsg
fQotCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAgICAg
dm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKQEAgLTk3NSw4ICs5NzIs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVy
bmF0aXZlOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBtX3By
ZWRpY3Rpb25zOwotCiAgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKICAgICAgICAg
dWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOwogICAgICAgICB1aW50MzJfdCBt
X3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5NTc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5l
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShk
ZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGlj
dGlvbnMgd2UndmUgbWFkZSwgc28gdGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVk
aWN0aW9ucwotICAgIC8vIGFyZSBzYXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ug
d2lsbCBiZSBkb2luZyBPU1IgZW50cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3
aGljaCB3ZSBhcmUgT1NSaW5nIG1heSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25Q
dHI8UHJlZGljdGlvblRyYWNrZXI+IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rp
b25UcmFja2VyKCkpOwotICAgICpwcmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0g
ICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5y
ZWxlYXNlKCkpOwotICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEs
IGRmZywgY29kZUJsb2NrKTsKICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9u
KSB7CiAgICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTU3NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMyw0MCArMzIzLDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRS
WSkKICAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdP
U1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2Vlbiht
X3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsYXN0
TGl2ZUFyZ3VtZW50ID0gMDsKLSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2Fy
Z3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0
aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpLCBiYXNpY0Js
b2NrLm1fbG9jYWxzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
PSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAo
YmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAg
ICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5
cGUobV9ncmFwaC5wcmVkaWN0aW9ucygpLmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2xvY2Fscy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDw9IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlm
IChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlv
bnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZSht
X2dyYXBoLnByZWRpY3Rpb25zKCkuZ2V0UHJlZGljdGlvbihpKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgewotICAgICAgICAgICAgZW50cnkt
Pm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCArIDEpOwotICAgICAgICAg
ICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1lbnQ7ICsraSkg
ewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9
IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5zZXQo
aSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnktPm1f
bGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZl
TG9jYWwpIHsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXplKGxhc3RM
aXZlTG9jYWwgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJB
bGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5t
X2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xpdmVWYXJpYWJsZXMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKKyAgICAgICAgYWN0
aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5tX3By
ZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VE
X1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjMgKzM1LDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1pbmxpbmUgYm9vbCBwcmVk
aWN0aW9uSXNWYWxpZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUsIFBy
ZWRpY3RlZFR5cGUgdHlwZSkKLXsKLSAgICAvLyB0aGlzIHRha2VzIGludG8gYWNjb3VudCBvbmx5
IGxvY2FsIHZhcmlhYmxlIHByZWRpY3Rpb25zIHRoYXQgZ2V0IGVuZm9yY2VkCi0gICAgLy8gb24g
U2V0TG9jYWwuCi0gICAgCi0gICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHR5cGUpKQotICAgICAg
ICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotICAgIAotICAgIGlmIChpc0FycmF5UHJlZGljdGlv
bih0eXBlKSkKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0g
ICAgCi0gICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiB2
YWx1ZS5pc0Jvb2xlYW4oKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCogcHJl
cGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCkBAIC02Niw3
ICs0OSw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICNlbmRp
ZgogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5kZmdPU1JFbnRy
eURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVChl
bnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgpOwpAQCAtOTUsMjYgKzc3LDM0
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICBp
bnRvIGEgbGVzcy1saWtlbHkgcGF0aC4gU28sIHRoZSB3aXNlc3QgY291cnNlIG9mIGFjdGlvbiBp
cyB0byBzaW1wbHkgbm90CiAgICAgLy8gICAgT1NSIGF0IHRoaXMgdGltZS4KICAgICAKLSAgICBQ
cmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMgPSBiYXNlbGluZUNvZGVCbG9jay0+cHJlZGlj
dGlvbnMoKTsKLSAgICAKLSAgICBpZiAocHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCkg
PiBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVBcmd1bWVu
dHMuc2l6ZSgpICYmIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuZ2V0KGkpCi0gICAgICAgICAgICAm
JiAhcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBw
cmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVwcGVyQm91bmQoKTsg
KytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+
bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9B
Y3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
IChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsKKyNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIGFyZ3VtZW50ICV1IHdhcyBub3QgcGFzc2VkLCBleHBlY3RlZCAlcy5cbiIsIGksIGFjdGlv
bmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworI2VuZGlmCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZU9iZXlz
UHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb24p
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBp
LCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5n
KHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJs
ZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChpIDwgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5zaXplKCkgJiYgZW50cnktPm1fbGl2ZVZhcmlh
Ymxlcy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRh
LCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0
aW9uKGkpKSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0
aW9ucy52YXJpYWJsZVVwcGVyQm91bmQoKTsgKytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVk
aWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKKyAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlv
bihnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24p
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBp
LCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlv
blRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVk
ICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCks
IGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5LDcgKzExOSw3IEBAIHZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBpZiAoIWdsb2JhbERh
dGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jv
d3RoIGZhaWxlZC4uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNl
IHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShyZXZpc2lv
biA5NTc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdPU1JFbnRyeV9oCiAjZGVm
aW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRl
ICJBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksOCAr
MzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHVuc2ln
bmVkIG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0Owot
ICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1bWVudHM7Ci0gICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlh
YmxlczsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKIH07CiAKIGlu
bGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSog
b3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRW
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZElu
dFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNr
ZWRJbnRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYWNrZWRJbnRWZWN0
b3JfaAorI2RlZmluZSBQYWNrZWRJbnRWZWN0b3JfaAorCisjaW5jbHVkZSAiQml0VmVjdG9yLmgi
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gY3JlYXRl
IGFuIGFycmF5IG9mIGludGVnZXJzLCB3aGVyZSB0aG9zZQorLy8gaW50ZWdlcnMgaGF2ZSBvbmx5
IGEgaGFuZGZ1bCBvZiBiaXRzIGVhY2guIEl0IGlzIG5vdCBtZWFudCB0byBiZQorLy8gZWZmaWNp
ZW50IGluIHRpbWUsIGJ1dCBvbmx5IGluIHNwYWNlLiAoVGhvdWdoIG1ha2luZyBpdCBlZmZpY2ll
bnQKKy8vIGluIHRpbWUgZm9yIHBvd2VyLW9mLTIgdmFsdWVzIG9mIGJpdENvdW50IHdvdWxkIG5v
dCBiZSBkaWZmaWN1bHQuKQorLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBhcyBleHBl
Y3RlZCBmb3Igc2lnbmVkIHR5cGVzLCBpZiB5b3UKKy8vIGFyZSByZWx5aW5nIG9uIHRoZSBzaWdu
IGJlaW5nIHByZXNlcnZlZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgYml0Q291
bnQ+CitjbGFzcyBQYWNrZWRJbnRWZWN0b3IgeworcHVibGljOgorICAgIFBhY2tlZEludFZlY3Rv
cigpCisgICAgeworICAgICAgICBBU1NFUlQoYml0Q291bnQpOworICAgICAgICBBU1NFUlQoYml0
Q291bnQgPCBzaXplb2Yodm9pZCopICogOCk7CisgICAgfQorICAgIAorICAgIFBhY2tlZEludFZl
Y3Rvcihjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0cyhvdGhl
ci5tX2JpdHMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJbnRWZWN0b3ImIG9wZXJh
dG9yPShjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9iaXRz
ID0gb3RoZXIubV9iaXRzOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAg
IHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdHMuc2l6ZSgp
IC8gYml0Q291bnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlU2l6ZShzaXplX3QgbnVt
SW50cykKKyAgICB7CisgICAgICAgIG1fYml0cy5lbnN1cmVTaXplKG51bUludHMgKiBiaXRDb3Vu
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1JbnRzKQorICAgIHsK
KyAgICAgICAgbV9iaXRzLnJlc2l6ZShudW1JbnRzICogYml0Q291bnQpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNsZWFyQWxsKCkKKyAgICB7CisgICAgICAgIG1fYml0cy5jbGVhckFsbCgpOwor
ICAgIH0KKyAgICAKKyAgICBUIGdldChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICB1aW50cHRyX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9
IDA7IHN1YkluZGV4IDwgYml0Q291bnQ7ICsrc3ViSW5kZXgpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCB8PSBtX2JpdHMuZ2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCk7CisgICAgICAgICAg
ICByZXN1bHQgPDw9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBpbmRleCwgVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFyaXRobWV0aWMgdXNpbmcgdWludHB0cl90LCBiZWNh
dXNlICgxKSB3ZSBrbm93IHdoYXQgaXQgaXMKKyAgICAgICAgLy8gKFQgbWlnaHQgYmUgYW4gZW51
bSkgYW5kICgyKSBpdCdzIHRoZSBsYXJnZXN0IGludGVnZXIgdHlwZSB0aGF0CisgICAgICAgIC8v
IGlzIGxpa2VseSB0byBwZXJmb3JtIGRlY2VudGx5IHdlbGwuCisgICAgICAgIHVpbnRwdHJfdCBt
eVZhbHVlID0gc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBQcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgbm90IG91dCBv
ZiByYW5nZS4KKyAgICAgICAgQVNTRVJUKChteVZhbHVlICYgbWFzaygpKSA9PSBteVZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3VudDsgc3Vi
SW5kZXgtLSA+IDA7KSB7CisgICAgICAgICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0Q291bnQg
KyBzdWJJbmRleCwgISEobXlWYWx1ZSAmIDEpKTsKKyAgICAgICAgICAgIG15VmFsdWUgPj49IDE7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayB0aGF0
IHdlIHN0b3JlZCB3aGF0IHRoZSB1c2VyIHRob3VnaHQgd2UKKyAgICAgICAgLy8gc3RvcmVkLgor
ICAgICAgICBBU1NFUlQoZ2V0KGluZGV4KSA9PSB2YWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAg
ICAvLyBUaGlzIHJldHVybnMgdGhlIG1hc2ssIGFuZCBpcyBjYXJlZnVsIHRvIG5vdCBzdGVwIG9u
IHRoZSB3cmFwLWFyb3VuZAorICAgIC8vIHNlbWFudGljcyBvZiB0aGUgc2hpZnQgYW1vdW50ICgx
IDw8IDMyIGlzIDEgc2luY2UgMzIgd3JhcHMgdG8gMCkuIFRoZXJlCisgICAgLy8gaXMgdGhlIHNl
cGFyYXRlIHF1ZXN0aW9uIG9mIHdoeSB5b3Ugd291bGQgZXZlciB1c2UgdGhpcyB0byBzdG9yZSAz
Mi1iaXQKKyAgICAvLyBvciA2NC1iaXQgdmFsdWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIg
dG8gaGF2ZSB0aGlzIHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAvLyBpbiBzdWNoIHNpdHVhdGlvbnMg
cmVnYXJkbGVzcy4KKyAgICBzdGF0aWMgdWludHB0cl90IG1hc2soKSB7IHJldHVybiAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigyKSA8PCAoYml0Q291bnQgLSAxKSkgLSAxOyB9CisgICAgICAgICAg
ICAgICAKKyAgICAvLyBTdG9yZXMgaW50ZWdlcnMgYml0IGJ5IGJpdCBpbiBiaWcgZW5kaWFuLgor
ICAgIEJpdFZlY3RvciBtX2JpdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpQYWNrZWRJbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBQYWNrZWRJbnRWZWN0b3JfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108625</attachid>
            <date>2011-09-25 21:15:23 -0700</date>
            <delta_ts>2011-09-25 22:04:42 -0700</delta_ts>
            <desc>the patch after merging</desc>
            <filename>liverangesplit_patch_2.diff</filename>
            <type>text/plain</type>
            <size>27237</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgICogd3Rm
L1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChX
VEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpjbGVhckFs
bCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6
UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om1h
c2spOgorCiAyMDExLTA5LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRmluaXNoIHJlbW92aW5nIFBMQVRGT1JNKEJSRVdNUCkgYnkgcmVtb3ZpbmcgYXNzb2Np
YXRlZCBjb2RlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTU5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksMTAgQEAKIAkJMEJERkZB
RTAwRkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5
RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25G
YXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGlt
aXRzLmNwcCAqLzsgfTsKKwkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcy
NDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8qIEJpdFZlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
NEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKKwkJMEY2MzZEQTAx
NDJEMjdENzAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBh
Y2tlZEludFZlY3Rvci5oICovOyB9OworCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0
aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlv
bi5oICovOyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2
M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyog
UmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4
NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxF
Ul9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CkBAIC03OTMsOCArNzk1LDEw
IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3Nz
VGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9z
c1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJGMjhB
MjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYwNEU4QTE0
MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFj
a1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE0LDcgKzE4MTgsOCBAQAogCQk2NTE2
MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9y
LmNwcCAqLywKKwkJCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggKi8sCisJCQkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8s
CiAJCQkJMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMy
MkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQw
MDNCMTc0RSAvKiBtYWMgKi8sCkBAIC0yMzQxLDYgKzIzNDYsNyBAQAogCQk5NjlBMDc4RjBFRDFE
M0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oICovLAogCQkJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwICovLAogCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBl
LmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5o
ICovLApAQCAtMjgyNCw2ICsyODMwLDggQEAKIAkJCQkxQTA4Mjc3QTE0MjE2OEQ3MDA5MENDQUMg
LyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NTZCMDE0MjdGQjkx
MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5
MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJk
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKQEAgLTMxMzgsNiArMzE0Niw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2Vz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9
ICgKKwkJCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyog
VmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3
OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJs
ZVByZWRpY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBY3Rpb25hYmxlUHJl
ZGljdGlvbl9oCisjZGVmaW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKKworI2luY2x1ZGUgIkpT
QXJyYXkuaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9QYWNrZWRJbnRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIEFuIGFjdGlvbmFibGUgcHJlZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNlZCBvbiBz
dG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzCisvLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hlbiBwYXNz
aW5nIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQKKy8vIGlu
IENvZGVCbG9jay4KKworZW51bSBBY3Rpb25hYmxlUHJlZGljdGlvbiB7CisgICAgTm9BY3Rpb25h
YmxlUHJlZGljdGlvbiwKKyAgICBFbmZvcmNlSW50MzJQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VB
cnJheVByZWRpY3Rpb24sCisgICAgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCit9OworCitpbmxp
bmUgQWN0aW9uYWJsZVByZWRpY3Rpb24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVk
VHlwZShQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCit7CisgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGljdGlvbjsK
KyAgICAKKyAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJl
dHVybiBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5QcmVkaWN0
aW9uOworICAgIAorICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworfQorCitpbmxp
bmUgYm9vbCB2YWx1ZU9iZXlzUHJlZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpT
VmFsdWUgdmFsdWUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dp
dGNoIChwcmVkaWN0aW9uKSB7CisgICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAg
ICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVk
aWN0aW9uOgorICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKKwor
ICAgIGNhc2UgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gdmFsdWUu
aXNCb29sZWFuKCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVk
aWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3Ry
aW5nKEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVk
aWN0aW9uKSB7CisgICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1
cm4gIkVuZm9yY2VJbnQzMiI7CisgICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGlj
dGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQXJyYXkiOworICAgICAgICAKKyAgICBjYXNl
IEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQm9vbGVh
biI7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gIk5vQWN0aW9uYWJsZVBy
ZWRpY3Rpb24iOworICAgIH0KK30KKwordHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0aW9uYWJs
ZVByZWRpY3Rpb24sIDI+IEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yOworCitjbGFzcyBBY3Rp
b25hYmxlUHJlZGljdGlvbnMgeworcHVibGljOgorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucygp
IHsgfQorCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtVmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5zdXJl
U2l6ZShudW1Bcmd1bWVudHMpOworICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXplKG51bVZh
cmlhYmxlcyk7CisgICAgICAgIG1fYXJndW1lbnRzLmNsZWFyQWxsKCk7CisgICAgICAgIG1fdmFy
aWFibGVzLmNsZWFyQWxsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnQodW5z
aWduZWQgYXJndW1lbnQsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV9hcmd1bWVudHMuc2V0KGFyZ3VtZW50LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIGFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50ID49IG1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMu
Z2V0KGFyZ3VtZW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRWYXJpYWJsZSh1bnNpZ25l
ZCB2YXJpYWJsZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBt
X3ZhcmlhYmxlcy5zZXQodmFyaWFibGUsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9u
YWJsZVByZWRpY3Rpb24gdmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUpCisgICAgeworICAgICAg
ICBpZiAodmFyaWFibGUgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlcy5nZXQo
dmFyaWFibGUpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVyQm91bmQo
KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCB2YXJp
YWJsZVVwcGVyQm91bmQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAg
ICAKKyAgICB2b2lkIHBhY2soKQorICAgIHsKKyAgICAgICAgcGFja1ZlY3RvcihtX2FyZ3VtZW50
cyk7CisgICAgICAgIHBhY2tWZWN0b3IobV92YXJpYWJsZXMpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIHZvaWQgcGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlvblZlY3Rv
ciYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0gMDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKHZlY3Rvci5nZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAg
ICAgICAgICAgICAgICBsYXN0U2V0SW5kZXggPSBpOworICAgICAgICB9CisgICAgICAgIHZlY3Rv
ci5yZXNpemUobGFzdFNldEluZGV4ICsgMSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQ
cmVkaWN0aW9uVmVjdG9yIG1fYXJndW1lbnRzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVj
dG9yIG1fdmFyaWFibGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBB
Y3Rpb25hYmxlUHJlZGljdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDkgKzI0MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyByZXR1
cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4g
cmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVkaWN0
aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zOyB9
Ci0gICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KLQogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogCkBAIC05NzUsOCArOTcyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxQ
cmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsKLQogICAgICAgICBpbnQzMl90IG1fZXhl
Y3V0ZUNvdW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cjsKICAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gOTU5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDE1ICs0Nyw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICAKICAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spOwogICAgIAot
ICAgIC8vIFNhdmUgdGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVudHJ5
IGNhbiB2ZXJpZnkgdGhlbS4gUHJlZGljdGlvbnMKLSAgICAvLyBhcmUgc2F2ZWQgaW4gdGhlIENv
ZGVCbG9jayBmcm9tIHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0aGUK
LSAgICAvLyBDb2RlQmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFjZWQg
YXQgYW55IHRpbWUuCi0gICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucyA9
IGFkb3B0UHRyKG5ldyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKLSAgICAqcHJlZGljdGlvbnMgPSBk
ZmcucHJlZGljdGlvbnMoKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwotICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0UHJl
ZGljdGlvbnMocHJlZGljdGlvbnMucmVsZWFzZSgpKTsKLSAgICAKICAgICBKSVRDb21waWxlciBk
YXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CiAgICAgaWYgKGNvbXBpbGVN
b2RlID09IENvbXBpbGVGdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0
eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDk1OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNDAgKzM5MywyMSBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCiAgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBj
b2RlQmxvY2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOwogICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IGxhc3RMaXZlTG9jYWwgPSAwOwotICAgICAgICAKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rp
b25zIGFjdGlvbmFibGVQcmVkaWN0aW9ucyhiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKSwg
YmFzaWNCbG9jay5tX2xvY2Fscy5zaXplKCkpOworCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAg
ICAgICAgICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgICAgICAgICAgYWN0aW9uYWJs
ZVByZWRpY3Rpb25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRp
Y3RlZFR5cGUobV9ncmFwaC5wcmVkaWN0aW9ucygpLmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YmFzaWNCbG9jay5tX2xvY2Fscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGJhc2lj
QmxvY2subV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RM
aXZlTG9jYWwgPSBpOworICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRW
YXJpYWJsZShpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGgu
cHJlZGljdGlvbnMoKS5nZXRQcmVkaWN0aW9uKGkpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZl
QXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7Ci0gICAgICAgICAgICBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2Rl
KQotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNldChpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJn
dW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGFzdExpdmVMb2NhbCkg
ewotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFzdExpdmVMb2Nh
bCArIDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RM
aXZlTG9jYWw7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxz
W2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZh
cmlhYmxlcy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgICAgICBhY3Rpb25hYmxl
UHJlZGljdGlvbnMucGFjaygpOworICAgICAgICAKKyAgICAgICAgZW50cnktPm1fcHJlZGljdGlv
bnMgPSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0o
YmFzaWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyArMzUsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWlubGluZSBib29sIHByZWRpY3Rpb25J
c1ZhbGlkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgUHJlZGljdGVk
VHlwZSB0eXBlKQotewotICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IG9ubHkgbG9jYWwg
dmFyaWFibGUgcHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQKLSAgICAvLyBvbiBTZXRMb2Nh
bC4KLSAgICAKLSAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVy
biB2YWx1ZS5pc0ludDMyKCk7Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHR5cGUp
KQotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICAKLSAg
ICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlz
Qm9vbGVhbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKQEAgLTY2LDcgKzQ5LDYg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogI2VuZGlmCiAgICAg
CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
OwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKGVudHJ5LT5t
X2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CkBAIC05NSwyNiArNzcsMzQgQEAgdm9p
ZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAgIGludG8gYSBs
ZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIHNp
bXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAgIFByZWRpY3Rp
b25UcmFja2VyKiBwcmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5wcmVkaWN0aW9ucygp
OwotICAgIAotICAgIGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKSA+IGV4ZWMt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5zaXpl
KCkgJiYgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVk
aWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rp
b25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsK
KyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRp
Y3Rpb25zLmFyZ3VtZW50KGkpOworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGkgPj0g
ZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJn
dW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwgYWN0aW9uYWJsZVBy
ZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0
aW9uKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbikpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGlj
dGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOworICAgICAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIs
IGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
ZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlVmFyaWFibGVzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmdl
dChpKQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZh
cmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24g
cHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOworICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2Jh
bERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJp
bmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHByaW50Zigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4i
LCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwgYWN0aW9u
YWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjksNyArMTE5LDcgQEAgdm9pZCogcHJlcGFyZU9T
UkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIGlmICghZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVCbG9j
ay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
Ci0gICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFp
bGVkLi5cbiIpOworICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sg
Z3Jvd3RoIGZhaWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk1OTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZH
T1NSRW50cnlfaAogCi0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgIkFjdGlv
bmFibGVQcmVkaWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw4ICszOSw3IEBA
IG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWduZWQgbV9i
eXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgQml0
VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKLSAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOwor
ICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOwogfTsKIAogaW5saW5lIHVu
c2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRy
eURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9y
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZl
Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhY2tlZEludFZlY3Rvcl9oCisj
ZGVmaW5lIFBhY2tlZEludFZlY3Rvcl9oCisKKyNpbmNsdWRlICJCaXRWZWN0b3IuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgY2xhc3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4gYXJy
YXkgb2YgaW50ZWdlcnMsIHdoZXJlIHRob3NlCisvLyBpbnRlZ2VycyBoYXZlIG9ubHkgYSBoYW5k
ZnVsIG9mIGJpdHMgZWFjaC4gSXQgaXMgbm90IG1lYW50IHRvIGJlCisvLyBlZmZpY2llbnQgaW4g
dGltZSwgYnV0IG9ubHkgaW4gc3BhY2UuIChUaG91Z2ggbWFraW5nIGl0IGVmZmljaWVudAorLy8g
aW4gdGltZSBmb3IgcG93ZXItb2YtMiB2YWx1ZXMgb2YgYml0Q291bnQgd291bGQgbm90IGJlIGRp
ZmZpY3VsdC4pCisvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGZv
ciBzaWduZWQgdHlwZXMsIGlmIHlvdQorLy8gYXJlIHJlbHlpbmcgb24gdGhlIHNpZ24gYmVpbmcg
cHJlc2VydmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBiaXRDb3VudD4KK2Ns
YXNzIFBhY2tlZEludFZlY3RvciB7CitwdWJsaWM6CisgICAgUGFja2VkSW50VmVjdG9yKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCk7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCA8
IHNpemVvZih2b2lkKikgKiA4KTsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yKGNv
bnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzKG90aGVyLm1fYml0
cykKKyAgICB7CisgICAgfQorICAgIAorICAgIFBhY2tlZEludFZlY3RvciYgb3BlcmF0b3I9KGNv
bnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2JpdHMgPSBvdGhl
ci5tX2JpdHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5zaXplKCkgLyBiaXRD
b3VudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1JbnRzKQor
ICAgIHsKKyAgICAgICAgbV9iaXRzLmVuc3VyZVNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUludHMpCisgICAgeworICAgICAg
ICBtX2JpdHMucmVzaXplKG51bUludHMgKiBiaXRDb3VudCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAgICAgbV9iaXRzLmNsZWFyQWxsKCk7CisgICAgfQor
ICAgIAorICAgIFQgZ2V0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnRw
dHJfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gMDsgc3Vi
SW5kZXggPCBiaXRDb3VudDsgKytzdWJJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0IDw8PSAx
OworICAgICAgICAgICAgcmVzdWx0IHw9IG1fYml0cy5nZXQoaW5kZXggKiBiaXRDb3VudCArIHN1
YkluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4ocmVzdWx0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBUIHZhbHVlKQorICAg
IHsKKyAgICAgICAgLy8gRG8gYXJpdGhtZXRpYyB1c2luZyB1aW50cHRyX3QsIGJlY2F1c2UgKDEp
IHdlIGtub3cgd2hhdCBpdCBpcworICAgICAgICAvLyAoVCBtaWdodCBiZSBhbiBlbnVtKSBhbmQg
KDIpIGl0J3MgdGhlIGxhcmdlc3QgaW50ZWdlciB0eXBlIHRoYXQKKyAgICAgICAgLy8gaXMgbGlr
ZWx5IHRvIHBlcmZvcm0gZGVjZW50bHkgd2VsbC4KKyAgICAgICAgdWludHB0cl90IG15VmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBy
ZWxpbWluYXJ5IHNhbml0eSBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBub3Qgb3V0IG9mIHJhbmdl
LgorICAgICAgICBBU1NFUlQoKG15VmFsdWUgJiBtYXNrKCkpID09IG15VmFsdWUpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IGJpdENvdW50OyBzdWJJbmRleC0t
ID4gMDspIHsKKyAgICAgICAgICAgIG1fYml0cy5zZXQoaW5kZXggKiBiaXRDb3VudCArIHN1Yklu
ZGV4LCAhIShteVZhbHVlICYgMSkpOworICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIHRoYXQgd2Ugc3Rv
cmVkIHdoYXQgdGhlIHVzZXIgdGhvdWdodCB3ZQorICAgICAgICAvLyBzdG9yZWQuCisgICAgICAg
IEFTU0VSVChnZXQoaW5kZXgpID09IHZhbHVlKTsKKyAgICB9Citwcml2YXRlOgorICAgIC8vIFRo
aXMgcmV0dXJucyB0aGUgbWFzaywgYW5kIGlzIGNhcmVmdWwgdG8gbm90IHN0ZXAgb24gdGhlIHdy
YXAtYXJvdW5kCisgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBzaGlmdCBhbW91bnQgKDEgPDwgMzIg
aXMgMSBzaW5jZSAzMiB3cmFwcyB0byAwKS4gVGhlcmUKKyAgICAvLyBpcyB0aGUgc2VwYXJhdGUg
cXVlc3Rpb24gb2Ygd2h5IHlvdSB3b3VsZCBldmVyIHVzZSB0aGlzIHRvIHN0b3JlIDMyLWJpdAor
ICAgIC8vIG9yIDY0LWJpdCB2YWx1ZXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBoYXZl
IHRoaXMgd29yayBhcyBleHBlY3RlZAorICAgIC8vIGluIHN1Y2ggc2l0dWF0aW9ucyByZWdhcmRs
ZXNzLgorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFzaygpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDIpIDw8IChiaXRDb3VudCAtIDEpKSAtIDE7IH0KKyAgICAgICAgICAgICAgIAor
ICAgIC8vIFN0b3JlcyBpbnRlZ2VycyBiaXQgYnkgYml0IGluIGJpZyBlbmRpYW4uCisgICAgQml0
VmVjdG9yIG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBh
Y2tlZEludFZlY3RvcjsKKworI2VuZGlmIC8vIFBhY2tlZEludFZlY3Rvcl9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108626</attachid>
            <date>2011-09-25 22:04:42 -0700</date>
            <delta_ts>2011-09-26 16:18:22 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>liverangesplit_patch_3.diff</filename>
            <type>text/plain</type>
            <size>43343</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgICogd3Rm
L1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChX
VEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpjbGVhckFs
bCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6
UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om1h
c2spOgorCiAyMDExLTA5LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRmluaXNoIHJlbW92aW5nIFBMQVRGT1JNKEJSRVdNUCkgYnkgcmVtb3ZpbmcgYXNzb2Np
YXRlZCBjb2RlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTU5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksMTAgQEAKIAkJMEJERkZB
RTAwRkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5
RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25G
YXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGlt
aXRzLmNwcCAqLzsgfTsKKwkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcy
NDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8qIEJpdFZlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
NEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKKwkJMEY2MzZEQTAx
NDJEMjdENzAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBh
Y2tlZEludFZlY3Rvci5oICovOyB9OworCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0
aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlv
bi5oICovOyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2
M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyog
UmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4
NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxF
Ul9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CkBAIC02NSw2ICs2Nyw3IEBA
CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAv
KiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9
OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgx
Q0IgLyogREZHRHJpdmVyLmggKi87IH07CisJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBV
bmlvbkZpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRp
ZXMuY3BwICovOyB9OwogCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTU0MTQxREFFRUUw
MDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
OTMsOCArNzk2LDEwIEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFs
bG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5
RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8q
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBB
Y3Rpb25hYmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y3Rpb25hYmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlC
MiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVk
QmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTAsNiArODE1LDcg
QEAKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNC
IC8qIERGR1Byb3BhZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHUHJvcGFnYXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQ
cm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0
b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pb25GaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNw
cDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0g
ZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MTQsNyArMTgyMCw5IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1
NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAot
CQkJCTBGNjA0RThBMTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovLAorCQkJCTBG
RDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLywKKwkJCQkwRjYzNkQ5RjE0
MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi8sCisJCQkJMEYxNkQ3MjQxNDJD
MzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8sCiAJCQkJMEZEODJGNDkxNDI4MDY5MjAw
MTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAv
KiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCkBAIC0y
MzQxLDYgKzIzNDksNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjM2REEx
MTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovLAogCQkJCTBGRDgy
RThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgyRTg0
MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLApAQCAtMjgyNCw3ICsyODMzLDEw
IEBACiAJCQkJMUEwODI3N0ExNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNDU2QjAxNDI3RkI5MTAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpT
Qm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTAxNDJEMjdENzAwQjJF
NjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTIxNDJE
MjdGMDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzUyMUUxMzE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0zMTM4LDYgKzMxNTAsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEYxNkQ3
MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGlj
dGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNDksNyArMzM2Miw2IEBACiAJCQkJMUEw
ODI3NzkxNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzA0NTZCMTE0MjdGQjk1MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8q
IEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9u
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAor
I2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisKKyNpbmNsdWRlICJKU0FycmF5LmgiCisj
aW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRl
IDx3dGYvUGFja2VkSW50VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBhY3Rp
b25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxv
Y2FsIHZhcmlhYmxlcworLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVu
dHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCisvLyBpbiBDb2RlQmxvY2su
CisKK2VudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24geworICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rp
b24sCisgICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKKyAgICBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uLAorICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgorfTsKKworaW5saW5lIEFjdGlvbmFi
bGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rpb247CisgICAgCisgICAg
aWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3Jj
ZUFycmF5UHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjsKKyAgICAK
KyAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKK30KKworaW5saW5lIGJvb2wgdmFs
dWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVl
LCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAocHJlZGlj
dGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSW50MzIoKTsKKworICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKKyAg
ICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7CisKKyAgICBjYXNlIEVu
Zm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBO
b0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQor
CitpbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25h
YmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAocHJlZGljdGlvbikgewor
ICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNl
SW50MzIiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246CisgICAg
ICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKKyAgICAgICAgCisgICAgY2FzZSBFbmZvcmNlQm9v
bGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUJvb2xlYW4iOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsK
KyAgICB9Cit9CisKK3R5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9u
LCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKKworY2xhc3MgQWN0aW9uYWJsZVByZWRp
Y3Rpb25zIHsKK3B1YmxpYzoKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMoKSB7IH0KKworICAg
IEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bVZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJn
dW1lbnRzKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwor
ICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOworICAgICAgICBtX3ZhcmlhYmxlcy5jbGVh
ckFsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3Vt
ZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYXJndW1l
bnRzLnNldChhcmd1bWVudCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJl
ZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIGlmIChh
cmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gTm9BY3Rp
b25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVu
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUs
IEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV92YXJpYWJsZXMu
c2V0KHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgaWYgKHZhcmlh
YmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAgdm9p
ZCBwYWNrKCkKKyAgICB7CisgICAgICAgIHBhY2tWZWN0b3IobV9hcmd1bWVudHMpOworICAgICAg
ICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICAg
ICAgbGFzdFNldEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICB2ZWN0b3IucmVzaXplKGxh
c3RTZXRJbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZl
Y3RvciBtX2FyZ3VtZW50czsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX3Zhcmlh
YmxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQWN0aW9uYWJsZVBy
ZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw5ICsyNDAsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJu
YXRpdmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRl
cm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIHNldFByZWRpY3Rpb25zKFBhc3NPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+
IHByZWRpY3Rpb25zKSB7IG1fcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uczsgfQotICAgICAgICBQ
cmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRpY3Rp
b25zLmdldCgpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIApAQCAt
OTc1LDggKzk3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE93blB0cjxDb2RlQmxv
Y2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAgIAotICAgICAgICBPd25QdHI8UHJlZGljdGlvblRy
YWNrZXI+IG1fcHJlZGljdGlvbnM7Ci0KICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVy
OwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAg
IHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw2ICs4MywxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc1Bo
aVN0YWNrKCk7CiAgICAgLy8gQWRkIHNwaWxsIGxvY2F0aW9ucyB0byBub2Rlcy4KICAgICB2b2lk
IGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKKyAgICB7Cisg
ICAgICAgIG1fZ3JhcGguYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShsb2NhbCkpOworICAgICAg
ICByZXR1cm4gJm1fZ3JhcGgubGFzdCgpOworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShpbnQgbG9jYWwpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bG9jYWwpKTsKKyAgICB9CiAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2Yg
YSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQpA
QCAtMTMwLDE1ICsxNDEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZXhwYW5kIG1fcHJlc2Vy
dmVkVmFycyB0byBjb3ZlciB0aGVzZS4KICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzID0gc3RkOjpt
YXgobV9wcmVzZXJ2ZWRWYXJzLCBvcGVyYW5kICsgMSk7CiAKLSAgICAgICAgTm9kZUluZGV4IHBo
aSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgo
UGhpLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSk7CiAgICAgICAgIG1f
bG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBv
cGVyYW5kKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byhvcGVyYW5kKSwgcGhpKTsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHBoaSk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKICAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25l
ZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8o
b3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJh
bmRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVu
dGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBA
IC0xNTEsMTUgKzE2MiwyMyBAQCBwcml2YXRlOgogCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0g
Tm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwot
ICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBpZiAobm9k
ZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcg
YW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCisgICAgICAgICAgICAg
ICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OwogICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRM
b2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUub3AgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFk
ZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSk7CiAgICAgICAgIG1fYXJndW1l
bnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1
bWVudCkpOwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
b3BlcmFuZCksIHBoaSk7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCBwaGkpOwogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4Owog
ICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KQEAgLTE2OCw3ICsxODcsNyBAQCBwcml2
YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAg
ICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9j
YWwsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBH
ZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24g
b24gaXQuCkBAIC02ODgsNiArNzA3LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRz
LnNpemUoKTsgKytpKQogICAgICAgICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29y
ZCgpOwogICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2Nr
LCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cworICAgIC8vIHVz
IHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1
bWVudCBwYXNzZWQsIGFzCisgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBl
eHBsaWNpdGx5LgorICAgIGlmICghbV9jdXJyZW50SW5kZXgpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQp
CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZhbHVl
ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG9wZXJhbmQpKTsKKyAgICB9CiAKICAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwog
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpOwpAQCAtMTQzNCw3ICsxNDYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhp
U3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCA9PSBQaGkpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJn
dW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKIAogICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsKICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5yZWZDb3VudCgpKQpAQCAtMTQ1Myw3ICsxNDgwLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhp
KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dyYXBoKFBoaSwgbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKHBoaU5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZl
Y3RvciByZXNpemUKICAgICAgICAgICAgIE5vZGUmIG5ld1BoaU5vZGUgPSBtX2dyYXBoW25ld1Bo
aV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwgc28g
dGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAgIC8vIGFyZSBz
YXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1IgZW50
cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5nIG1h
eSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+
IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkpOwotICAgICpw
cmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotICAgIAogICAg
IEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAg
ICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNTcsNiArNTgsNDYgQEAgc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKICAgICBOb2RlSW5kZXgg
dmFsdWU7CiB9OwogCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8
VmFyaWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkK
KyAgICAgICAgOiBtX29wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKKyAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9vcGVyYW5kKG9w
ZXJhbmQpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgaW50IG9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFu
ZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CisgICAg
fQorICAgIAorICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Om1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1f
cHJlZGljdGlvbiwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWlu
ZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxs
IGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlv
bi4gQnV0CisgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5k
IHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNj
ZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgorCisgICAgaW50IG1fb3BlcmFuZDsKKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKIHN0cnVjdCBNZXRob2RDaGVja0RhdGEg
ewogICAgIC8vIEl0IGlzIHNhZmUgdG8gcmVmZXIgdG8gdGhlc2UgZGlyZWN0bHkgYmVjYXVzZSB0
aGV5IGFyZSBzaGFkb3dlZCBieQogICAgIC8vIHRoZSBvbGQgSklUJ3MgQ29kZUJsb2NrJ3MgTWV0
aG9kQ2FsbExpbmtJbmZvLgpAQCAtMzMzLDYgKzM3NCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKICAgICBWZWN0b3I8U3RvcmFnZUFj
Y2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxE
YXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOworICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFj
Y2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNl
cnZlZFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5
NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzkzLDQwICszOTMsMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdf
T1NSX0VOVFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFw
cGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VC
ZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOwotICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUxvY2Fs
ID0gMDsKLSAgICAgICAgCisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBhY3Rpb25hYmxl
UHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCksIGJhc2ljQmxvY2subV9s
b2NhbHMuc2l6ZSgpKTsKKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGJhc2ljQmxv
Y2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RM
aXZlQXJndW1lbnQgPSBpOworICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5z
ZXRBcmd1bWVudChpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3Jh
cGgucHJlZGljdGlvbnMoKS5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9s
b2NhbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxz
W2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsK
KyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0VmFyaWFibGUoaSwgYWN0
aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoLnByZWRpY3Rpb25zKCku
Z2V0UHJlZGljdGlvbihpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobGFz
dExpdmVBcmd1bWVudCkgewotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNp
emUobGFzdExpdmVBcmd1bWVudCArIDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3Vt
ZW50cy5jbGVhckFsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1lbnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
IChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFs
bCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZlTG9jYWwpIHsKLSAgICAgICAgICAg
IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXplKGxhc3RMaXZlTG9jYWwgKyAxKTsKLSAgICAg
ICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUxvY2FsOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2V0KGkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKKyAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnBh
Y2soKTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0gYWN0aW9uYWJs
ZVByZWRpY3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2ljQmxvY2spOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTU5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiAvLyBFbWl0
IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVt
cGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJP
U0UgMAorI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMQogLy8gRW1pdCBkdW1wcyBk
dXJpbmcgcHJvcGFnYXRpb24sIGluIGFkZGl0aW9uIHRvIGp1c3QgYWZ0ZXIuCiAjZGVmaW5lIEVO
QUJMRV9ERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSAwCiAvLyBFbWl0IGxvZ2dpbmcgZm9y
IE9TUiBleGl0IHZhbHVlIHJlY292ZXJpZXMgYXQgZXZlcnkgbm9kZSwgbm90IGp1c3Qgbm9kZXMg
dGhhdApAQCAtMTA4LDYgKzEwOCw0NiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNv
ZGVJbmRleDsKIH07CiAKK2NsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
KQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2EpCisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3By
ZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5t
X2xvY2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGJvb2wg
bWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6Om1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGlj
dGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBh
bnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3Bl
cmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CisgICAgLy8gcHV0
dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBE
Rkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNp
Z25pZmljYW50LgorCisgICAgaW50IG1fbG9jYWw7CisgICAgUHJlZGljdGVkVHlwZSBtX3ByZWRp
Y3Rpb247Cit9OworCiB0eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZsYWdzOwogI2RlZmluZSBO
b2RlVXNlQm90dG9tICAgICAgMHgwMAogI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQpA
QCAtMjIzLDYgKzI2Myw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxh
Z3MKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhp
LCAwKSBcCiAgICAgXAorICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4gKi9c
CisgICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJp
dHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50MzIp
IFwKICAgICBtYWNybyhCaXRPciwgTm9kZVJlc3VsdEludDMyKSBcCkBAIC00NTcsMTUgKzUwMCwz
MiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVP
ZkpTQ29uc3RhbnROb2RlKGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CiAgICAgfQogICAgIAorICAg
IGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Ap
IHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCA9PSBHZXRMb2NhbCB8fCBvcCA9PSBTZXRMb2NhbDsKKyAgICAgICAgcmV0dXJu
IGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgIH0KLQorICAgIAorICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOworICAg
IH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGhhc0xvY2FsKCkpOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3RlciltX29wSW5m
bzsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0K
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyArMzUsNiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWlubGluZSBib29sIHByZWRpY3Rp
b25Jc1ZhbGlkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgUHJlZGlj
dGVkVHlwZSB0eXBlKQotewotICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IG9ubHkgbG9j
YWwgdmFyaWFibGUgcHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQKLSAgICAvLyBvbiBTZXRM
b2NhbC4KLSAgICAKLSAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5pc0ludDMyKCk7Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHR5
cGUpKQotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICAK
LSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVl
LmlzQm9vbGVhbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKQEAgLTY2LDcgKzQ5
LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogI2VuZGlmCiAg
ICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpOwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKGVudHJ5
LT5tX2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CkBAIC05NSwyNiArNzcsMzQgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAgIGludG8g
YSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRv
IHNpbXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAgIFByZWRp
Y3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5wcmVkaWN0aW9u
cygpOwotICAgIAotICAgIGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKSA+IGV4
ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5z
aXplKCkgJiYgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5nZXQoaSkKLSAgICAgICAgICAgICYmICFw
cmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRp
Y3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kp
IHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3By
ZWRpY3Rpb25zLmFyZ3VtZW50KGkpOworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlv
bmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGkg
Pj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ug
YXJndW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwgYWN0aW9uYWJs
ZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVk
aWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbikpIHsK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NS
IGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4
ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOworICAgICAgICAgICAgcHJpbnRm
KCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5c
biIsIGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJl
ZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkg
PCBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlVmFyaWFibGVz
LmdldChpKQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4
ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24o
aSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25z
LnZhcmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rp
b24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOworICAgICAg
ICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGds
b2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NS
IGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4
ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHByaW50
ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQgJXMu
XG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwgYWN0
aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjksNyArMTE5LDcgQEAgdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIGlmICghZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGgg
ZmFpbGVkLi5cbiIpOworICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3Rh
Y2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk1
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUg
REZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgIkFj
dGlvbmFibGVQcmVkaWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw4ICszOSw3
IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWduZWQg
bV9ieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAg
Qml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKLSAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVz
OworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOwogfTsKIAogaW5saW5l
IHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JF
bnRyeURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVj
dG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZElu
dFZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhY2tlZEludFZlY3Rvcl9o
CisjZGVmaW5lIFBhY2tlZEludFZlY3Rvcl9oCisKKyNpbmNsdWRlICJCaXRWZWN0b3IuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgY2xhc3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4g
YXJyYXkgb2YgaW50ZWdlcnMsIHdoZXJlIHRob3NlCisvLyBpbnRlZ2VycyBoYXZlIG9ubHkgYSBo
YW5kZnVsIG9mIGJpdHMgZWFjaC4gSXQgaXMgbm90IG1lYW50IHRvIGJlCisvLyBlZmZpY2llbnQg
aW4gdGltZSwgYnV0IG9ubHkgaW4gc3BhY2UuIChUaG91Z2ggbWFraW5nIGl0IGVmZmljaWVudAor
Ly8gaW4gdGltZSBmb3IgcG93ZXItb2YtMiB2YWx1ZXMgb2YgYml0Q291bnQgd291bGQgbm90IGJl
IGRpZmZpY3VsdC4pCisvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVk
IGZvciBzaWduZWQgdHlwZXMsIGlmIHlvdQorLy8gYXJlIHJlbHlpbmcgb24gdGhlIHNpZ24gYmVp
bmcgcHJlc2VydmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBiaXRDb3VudD4K
K2NsYXNzIFBhY2tlZEludFZlY3RvciB7CitwdWJsaWM6CisgICAgUGFja2VkSW50VmVjdG9yKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCk7CisgICAgICAgIEFTU0VSVChiaXRDb3Vu
dCA8IHNpemVvZih2b2lkKikgKiA4KTsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9y
KGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzKG90aGVyLm1f
Yml0cykKKyAgICB7CisgICAgfQorICAgIAorICAgIFBhY2tlZEludFZlY3RvciYgb3BlcmF0b3I9
KGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2JpdHMgPSBv
dGhlci5tX2JpdHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5zaXplKCkgLyBi
aXRDb3VudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1JbnRz
KQorICAgIHsKKyAgICAgICAgbV9iaXRzLmVuc3VyZVNpemUobnVtSW50cyAqIGJpdENvdW50KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUludHMpCisgICAgeworICAg
ICAgICBtX2JpdHMucmVzaXplKG51bUludHMgKiBiaXRDb3VudCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAgICAgbV9iaXRzLmNsZWFyQWxsKCk7CisgICAg
fQorICAgIAorICAgIFQgZ2V0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVp
bnRwdHJfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gMDsg
c3ViSW5kZXggPCBiaXRDb3VudDsgKytzdWJJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0IDw8
PSAxOworICAgICAgICAgICAgcmVzdWx0IHw9IG1fYml0cy5nZXQoaW5kZXggKiBiaXRDb3VudCAr
IHN1YkluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4ocmVz
dWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBUIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gRG8gYXJpdGhtZXRpYyB1c2luZyB1aW50cHRyX3QsIGJlY2F1c2Ug
KDEpIHdlIGtub3cgd2hhdCBpdCBpcworICAgICAgICAvLyAoVCBtaWdodCBiZSBhbiBlbnVtKSBh
bmQgKDIpIGl0J3MgdGhlIGxhcmdlc3QgaW50ZWdlciB0eXBlIHRoYXQKKyAgICAgICAgLy8gaXMg
bGlrZWx5IHRvIHBlcmZvcm0gZGVjZW50bHkgd2VsbC4KKyAgICAgICAgdWludHB0cl90IG15VmFs
dWUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFByZWxpbWluYXJ5IHNhbml0eSBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBub3Qgb3V0IG9mIHJh
bmdlLgorICAgICAgICBBU1NFUlQoKG15VmFsdWUgJiBtYXNrKCkpID09IG15VmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IGJpdENvdW50OyBzdWJJbmRl
eC0tID4gMDspIHsKKyAgICAgICAgICAgIG1fYml0cy5zZXQoaW5kZXggKiBiaXRDb3VudCArIHN1
YkluZGV4LCAhIShteVZhbHVlICYgMSkpOworICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIHRoYXQgd2Ug
c3RvcmVkIHdoYXQgdGhlIHVzZXIgdGhvdWdodCB3ZQorICAgICAgICAvLyBzdG9yZWQuCisgICAg
ICAgIEFTU0VSVChnZXQoaW5kZXgpID09IHZhbHVlKTsKKyAgICB9Citwcml2YXRlOgorICAgIC8v
IFRoaXMgcmV0dXJucyB0aGUgbWFzaywgYW5kIGlzIGNhcmVmdWwgdG8gbm90IHN0ZXAgb24gdGhl
IHdyYXAtYXJvdW5kCisgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBzaGlmdCBhbW91bnQgKDEgPDwg
MzIgaXMgMSBzaW5jZSAzMiB3cmFwcyB0byAwKS4gVGhlcmUKKyAgICAvLyBpcyB0aGUgc2VwYXJh
dGUgcXVlc3Rpb24gb2Ygd2h5IHlvdSB3b3VsZCBldmVyIHVzZSB0aGlzIHRvIHN0b3JlIDMyLWJp
dAorICAgIC8vIG9yIDY0LWJpdCB2YWx1ZXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBo
YXZlIHRoaXMgd29yayBhcyBleHBlY3RlZAorICAgIC8vIGluIHN1Y2ggc2l0dWF0aW9ucyByZWdh
cmRsZXNzLgorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFzaygpIHsgcmV0dXJuIChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDIpIDw8IChiaXRDb3VudCAtIDEpKSAtIDE7IH0KKyAgICAgICAgICAgICAg
IAorICAgIC8vIFN0b3JlcyBpbnRlZ2VycyBiaXQgYnkgYml0IGluIGJpZyBlbmRpYW4uCisgICAg
Qml0VmVjdG9yIG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OlBhY2tlZEludFZlY3RvcjsKKworI2VuZGlmIC8vIFBhY2tlZEludFZlY3Rvcl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBVbmlvbkZpbmRfaAorI2RlZmluZSBVbmlvbkZpbmRfaAorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgVW5pb25GaW5kIGNsYXNzIGNh
biBiZSB1c2VkIHRvIGNvbXB1dGUgZGlzam9pbnQgc2V0cyB1c2luZyB0aGUKKy8vIGRpc2pvaW50
LXNldCBmb3Jlc3QgZGF0YSBzdHJ1Y3R1cmUuIEVhY2ggVW5pb25GaW5kIGluc3RhbmNlIGlzIGEK
Ky8vIG5vZGUgaW4gdGhlIGZvcmVzdC4gVHlwaWNhbGx5IHlvdSB1c2UgaXQgYnkgdXNpbmcgVW5p
b25GaW5kIGFzIGEKKy8vIHN1cGVyY2xhc3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBVbmlvbkZpbmQgeworcHVibGljOgorICAgIFVuaW9uRmluZCgpCisgICAgICAgIDogbV9wYXJl
bnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFQqIGZpbmQoKQorICAgIHsKKyAgICAgICAg
VCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBUKiBuZXh0ID0gcmVz
dWx0LT5tX3BhcmVudDsKKyAgICAgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgbV9wYXJlbnQgPSByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdW5pZnkoVCogb3Ro
ZXIpCisgICAgeworICAgICAgICBUKiBhID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5maW5kKCk7
CisgICAgICAgIFQqIGIgPSBvdGhlci0+ZmluZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KCFhLT5tX3BhcmVudCk7CisgICAgICAgIEFTU0VSVCghYi0+bV9wYXJlbnQpOworICAgICAgICAK
KyAgICAgICAgYS0+bV9wYXJlbnQgPSBiOworICAgIH0KK3ByaXZhdGU6CisgICAgVCogbV9wYXJl
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpVbmlvbkZpbmQ7CisK
KyNlbmRpZiAvLyBVbmlvbkZpbmRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108748</attachid>
            <date>2011-09-26 16:18:22 -0700</date>
            <delta_ts>2011-09-26 23:50:53 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>liverangesplit_patch_4.diff</filename>
            <type>text/plain</type>
            <size>48332</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgICogd3Rm
L1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChX
VEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpjbGVhckFs
bCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6
UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6Om1h
c2spOgorCiAyMDExLTA5LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRmluaXNoIHJlbW92aW5nIFBMQVRGT1JNKEJSRVdNUCkgYnkgcmVtb3ZpbmcgYXNzb2Np
YXRlZCBjb2RlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTU5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksMTAgQEAKIAkJMEJERkZB
RTAwRkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5
RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25G
YXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGlt
aXRzLmNwcCAqLzsgfTsKKwkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcy
NDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8qIEJpdFZlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
NEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKKwkJMEY2MzZEQTAx
NDJEMjdENzAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBh
Y2tlZEludFZlY3Rvci5oICovOyB9OworCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0
aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlv
bi5oICovOyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2
M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyog
UmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4
NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxF
Ul9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CkBAIC02NSw2ICs2Nyw3IEBA
CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAv
KiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9
OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgx
Q0IgLyogREZHRHJpdmVyLmggKi87IH07CisJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBV
bmlvbkZpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRp
ZXMuY3BwICovOyB9OwogCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTU0MTQxREFFRUUw
MDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
OTMsOCArNzk2LDEwIEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFs
bG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5
RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8q
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBB
Y3Rpb25hYmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y3Rpb25hYmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlC
MiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVk
QmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTAsNiArODE1LDcg
QEAKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNC
IC8qIERGR1Byb3BhZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHUHJvcGFnYXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQ
cm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0
b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pb25GaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNw
cDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0g
ZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MTQsNyArMTgyMCw5IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1
NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAot
CQkJCTBGNjA0RThBMTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovLAorCQkJCTBG
RDUyQUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLywKKwkJCQkwRjYzNkQ5RjE0
MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi8sCisJCQkJMEYxNkQ3MjQxNDJD
MzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8sCiAJCQkJMEZEODJGNDkxNDI4MDY5MjAw
MTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAv
KiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCkBAIC0y
MzQxLDYgKzIzNDksNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjM2REEx
MTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovLAogCQkJCTBGRDgy
RThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgyRTg0
MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLApAQCAtMjgyNCw3ICsyODMzLDEw
IEBACiAJCQkJMUEwODI3N0ExNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNDU2QjAxNDI3RkI5MTAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpT
Qm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTAxNDJEMjdENzAwQjJF
NjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTIxNDJE
MjdGMDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzUyMUUxMzE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0zMTM4LDYgKzMxNTAsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEYxNkQ3
MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGlj
dGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNDksNyArMzM2Miw2IEBACiAJCQkJMUEw
ODI3NzkxNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzA0NTZCMTE0MjdGQjk1MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8q
IEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9u
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAor
I2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisKKyNpbmNsdWRlICJKU0FycmF5LmgiCisj
aW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRl
IDx3dGYvUGFja2VkSW50VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBhY3Rp
b25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxv
Y2FsIHZhcmlhYmxlcworLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVu
dHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCisvLyBpbiBDb2RlQmxvY2su
CisKK2VudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24geworICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rp
b24sCisgICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKKyAgICBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uLAorICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgorfTsKKworaW5saW5lIEFjdGlvbmFi
bGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rpb247CisgICAgCisgICAg
aWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3Jj
ZUFycmF5UHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjsKKyAgICAK
KyAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKK30KKworaW5saW5lIGJvb2wgdmFs
dWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVl
LCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAocHJlZGlj
dGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSW50MzIoKTsKKworICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKKyAg
ICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7CisKKyAgICBjYXNlIEVu
Zm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBO
b0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQor
CitpbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25h
YmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAocHJlZGljdGlvbikgewor
ICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNl
SW50MzIiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246CisgICAg
ICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKKyAgICAgICAgCisgICAgY2FzZSBFbmZvcmNlQm9v
bGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUJvb2xlYW4iOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsK
KyAgICB9Cit9CisKK3R5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9u
LCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKKworY2xhc3MgQWN0aW9uYWJsZVByZWRp
Y3Rpb25zIHsKK3B1YmxpYzoKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMoKSB7IH0KKworICAg
IEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bVZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJn
dW1lbnRzKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwor
ICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOworICAgICAgICBtX3ZhcmlhYmxlcy5jbGVh
ckFsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3Vt
ZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYXJndW1l
bnRzLnNldChhcmd1bWVudCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJl
ZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIGlmIChh
cmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gTm9BY3Rp
b25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVu
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUs
IEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV92YXJpYWJsZXMu
c2V0KHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgaWYgKHZhcmlh
YmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAgdm9p
ZCBwYWNrKCkKKyAgICB7CisgICAgICAgIHBhY2tWZWN0b3IobV9hcmd1bWVudHMpOworICAgICAg
ICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICAg
ICAgbGFzdFNldEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICB2ZWN0b3IucmVzaXplKGxh
c3RTZXRJbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZl
Y3RvciBtX2FyZ3VtZW50czsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX3Zhcmlh
YmxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQWN0aW9uYWJsZVBy
ZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw5ICsyNDAsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJu
YXRpdmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRl
cm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIHNldFByZWRpY3Rpb25zKFBhc3NPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+
IHByZWRpY3Rpb25zKSB7IG1fcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uczsgfQotICAgICAgICBQ
cmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRpY3Rp
b25zLmdldCgpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIApAQCAt
OTc1LDggKzk3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE93blB0cjxDb2RlQmxv
Y2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAgIAotICAgICAgICBPd25QdHI8UHJlZGljdGlvblRy
YWNrZXI+IG1fcHJlZGljdGlvbnM7Ci0KICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVy
OwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAg
IHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw3ICs4MywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc1Bo
aVN0YWNrKCk7CiAgICAgLy8gQWRkIHNwaWxsIGxvY2F0aW9ucyB0byBub2Rlcy4KICAgICB2b2lk
IGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwotCisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBB
U1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgCisg
ICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNz
RGF0YShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKSk7CisgICAgICAgIHJl
dHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorICAgIAog
ICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0
aW9uLgogICAgIE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTI5LDE2ICsx
MzcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFy
aWVzIGZyb20gcHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJz
IHRvIGNvdmVyIHRoZXNlLgogICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1heChtX3By
ZXNlcnZlZFZhcnMsIG9wZXJhbmQgKyAxKTsKLQotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAg
IAorICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0Vu
dHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCBwaGkpOworICAgICAgICBub2Rl
SW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwg
cGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRdLnZhbHVlID0g
bm9kZUluZGV4OwogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNl
dExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0
TG9jYWwsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9sb2NhbHNbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVz
ZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBh
biBhcmd1bWVudC4KQEAgLTE1MSwxNSArMTYxLDI2IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIGlmIChub2RlLm9wID09IFNldEFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgLy8g
V2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsK
KyAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgorICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1bWVudF0u
dmFsdWUgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVy
biBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogCi0gICAgICAgIE5vZGVJbmRl
eCBwaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dy
YXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50
UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1l
bnQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG9w
ZXJhbmQpLCBwaGkpOworICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CkBAIC0xNjgsNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
dW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c1thcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3Bl
cmFuZCksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzW2FyZ3Vt
ZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQs
IGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgpAQCAtNjg4
LDYgKzcwOSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIG1fY29uc3RhbnRzW2ldID0gQ29uc3RhbnRSZWNvcmQoKTsKICAgICB9Cisg
ICAgCisgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1h
cmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKKyAgICAvLyB1cyB0byB0cmFjayBpZiBh
IHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBh
cworICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KKyAg
ICBpZiAoIW1fY3VycmVudEluZGV4KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KQorICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgo
U2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoYXJndW1lbnQgLSBtX2Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplKSkpOworICAgIH0KIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFs
RGF0YS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0xNDIxLDYgKzE0NTAsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAKICAgICAg
ICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRl
Y2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
ZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVj
ZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKQEAg
LTE0MjksMTIgKzE0NTksMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNr
KCkKIAogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52YWx1
ZTsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGkpOworICAgICAg
ICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3
VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gdmFyTm8g
LSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplIDogdmFyTm8pKSk7CiAgICAgICAgICAgICAgICAgdmFyLnZhbHVlID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0Vu
dHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExv
Y2FsKQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
b3AgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0
aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0
bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRoZSB0d28KKyAgICAgICAgICAgICAgICAvLyB0byBi
ZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVh
dGVzIEdldExvY2FscworICAgICAgICAgICAgICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVz
ZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEo
KSA9PSBtX2dyYXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKV0udmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZhbHVl
SW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9j
YWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUg
PT0gQXJndW1lbnRQaGlTdGFjaykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0
YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsKIAogICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsKICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5yZWZDb3VudCgpKQpAQCAtMTQ1Miw4ICsxNDkzLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhl
ZC5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5vZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dy
YXBoKFBoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBuZXdQaGkgPSBh
ZGRUb0dyYXBoKFBoaSwgT3BJbmZvKGRhdGFGb3JQaGkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZl
Y3RvciByZXNpemUKICAgICAgICAgICAgIE5vZGUmIG5ld1BoaU5vZGUgPSBtX2dyYXBoW25ld1Bo
aV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwgc28g
dGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAgIC8vIGFyZSBz
YXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1IgZW50
cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5nIG1h
eSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+
IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkpOwotICAgICpw
cmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotICAgIAogICAg
IEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAg
ICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDk1OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM5IEBAIGNvbnN0IGNoYXIg
KkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3AgJiBO
b2RlSWRNYXNrXTsKIH0KIAorY29uc3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNz
RGF0YShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKK3sKKyAgICAvLyBW
YXJpYWJsZXMgYXJlIGFscmVhZHkgbnVtYmVyZWQuIEZvciByZWFkYWJpbGl0eSBvZiBJUiBkdW1w
cywgdGhpcyByZXR1cm5zCisgICAgLy8gYW4gYWxwaGFiZXRpYyBuYW1lIGZvciB0aGUgdmFyaWFi
bGUgYWNjZXNzIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KKyAgICAvLyByZWFzb24g
YWJvdXQgdHdvIG51bWJlcnMgKHZhcmlhYmxlIG51bWJlciBhbmQgbGl2ZSByYW5nZSBudW1iZXIp
LCBidXQgaW5zdGVhZAorICAgIC8vIGEgbnVtYmVyIGFuZCBhIGxldHRlci4KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKCZtX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXSA9PSB2YXJpYWJsZUFj
Y2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChpbmRleCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIGlmICghaW5kZXgpCisgICAgICAg
IHJldHVybiAiQSI7CisKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIEJvdW5kc0NoZWNr
ZWRQb2ludGVyPGNoYXI+IHB0cihidWYsIHNpemVvZihidWYpKTsKKyAgICAKKyAgICB3aGlsZSAo
aW5kZXgpIHsKKyAgICAgICAgKnB0cisrID0gJ0EnICsgKGluZGV4ICUgMjYpOworICAgICAgICBp
bmRleCAvPSAyNjsKKyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICByZXR1
cm4gYnVmOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpAQCAt
MTE2LDEyICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBD
bwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgIGludCBsb2NhbCA9IG5vZGUu
bG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSkKLSAgICAgICAg
ICAgIHByaW50ZigiJXNhcmcldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsIC0gY29k
ZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBvcGVyYW5kID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcykiLCBoYXNQcmlu
dGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwgbmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwcmludGYoIiVzciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbG9j
YWwpOworICAgICAgICAgICAgcHJpbnRmKCIlc3IldSglcykiLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBvcGVyYW5kLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NEYXRh
KSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAob3AgPT0gSlND
b25zdGFudCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyNCw2ICszMjQsOSBAQCBwdWJsaWM6CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CisgICAgCisgICAgLy8gVGhp
cyBpcyBPKG4pLCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdmVyYm9zZSBkdW1wcy4KKyAg
ICBjb25zdCBjaGFyKiBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEpOwogI2VuZGlmCiAKICAgICB2b2lkIHByZWRpY3RBcmd1bWVu
dFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMzMzLDYgKzMzNiw3IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKICAgICBW
ZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9y
PFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOworICAgIFNlZ21lbnRlZFZl
Y3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICB1
bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDQwICszOTMsMjEgQEAgcHVibGljOgog
I2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVn
aW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOwotICAgICAgICB1bnNpZ25l
ZCBsYXN0TGl2ZUxvY2FsID0gMDsKLSAgICAgICAgCisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCks
IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpKTsKKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAg
ICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICAgICAgICAgIGFjdGlvbmFi
bGVQcmVkaWN0aW9ucy5zZXRBcmd1bWVudChpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVk
aWN0ZWRUeXBlKG1fZ3JhcGgucHJlZGljdGlvbnMoKS5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChiYXNp
Y0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0
TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0
VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBo
LnByZWRpY3Rpb25zKCkuZ2V0UHJlZGljdGlvbihpKSkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgewotICAgICAgICAgICAgZW50cnktPm1fbGl2
ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCArIDEpOwotICAgICAgICAgICAgZW50
cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1lbnQ7ICsraSkgewotICAg
ICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5zZXQoaSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFy
Z3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZlTG9jYWwp
IHsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXplKGxhc3RMaXZlTG9j
YWwgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0
TGl2ZUxvY2FsOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fs
c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVW
YXJpYWJsZXMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKKyAgICAgICAgYWN0aW9uYWJs
ZVByZWRpY3Rpb25zLnBhY2soKTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rp
b25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFN
KGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JvdW5k
c0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8
d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBm
b3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgogI2Rl
ZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtMTA4LDYgKzEwOSw1MSBAQCBwcml2
YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKIH07CiAKK2NsYXNzIFZhcmlhYmxl
QWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1Ymxp
YzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQorICAgICAgICA6IG1f
bG9jYWwobG9jYWwpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xv
Y2FsOworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJn
ZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6bWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9u
KTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRo
aW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5k
IGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAgICAvLyBwdXR0aW5n
IHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBz
cGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlm
aWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQcmVkaWN0ZWRUeXBl
IG1fcHJlZGljdGlvbjsKK307CisKIHR5cGVkZWYgdW5zaWduZWQgQXJpdGhOb2RlRmxhZ3M7CiAj
ZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwCiAjZGVmaW5lIE5vZGVVc2VkQXNOdW1iZXIg
ICAweDAxCkBAIC0yMjMsNiArMjY5LDkgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0
aE5vZGVGbGFncwogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhQaGksIDApIFwKICAgICBcCisgICAgLyogTWFya2VyIGZvciBhcmd1bWVudHMgYmVpbmcg
c2V0LiAqL1wKKyAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAorICAgIFwKICAgICAvKiBOb2Rl
cyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRBbmQsIE5vZGVSZXN1
bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdE9yLCBOb2RlUmVzdWx0SW50MzIpIFwKQEAgLTQ1Nywx
NSArNTA2LDMyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAm
JiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChvcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzTG9jYWwoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wID09IEdldExvY2FsIHx8IG9wID09IFNldExvY2FsOworICAgICAg
ICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgfQotCisgICAgCisgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pLT5maW5k
KCk7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQoaGFzTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVy
KW1fb3BJbmZvOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7
CiAgICAgfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk1OTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIzICsz
NSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotaW5saW5lIGJvb2wg
cHJlZGljdGlvbklzVmFsaWQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVl
LCBQcmVkaWN0ZWRUeXBlIHR5cGUpCi17Ci0gICAgLy8gdGhpcyB0YWtlcyBpbnRvIGFjY291bnQg
b25seSBsb2NhbCB2YXJpYWJsZSBwcmVkaWN0aW9ucyB0aGF0IGdldCBlbmZvcmNlZAotICAgIC8v
IG9uIFNldExvY2FsLgotICAgIAotICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLSAgICAKLSAgICBpZiAoaXNBcnJheVByZWRp
Y3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUp
OwotICAgIAotICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHR5cGUpKQotICAgICAgICByZXR1
cm4gdmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQpAQCAt
NjYsNyArNDksNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAj
ZW5kaWYKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+ZGZnT1NS
RW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAKICAgICBBU1NF
UlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKQEAgLTk1LDI2ICs3
NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8g
ICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rp
b24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0g
ICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zID0gYmFzZWxpbmVDb2RlQmxvY2stPnBy
ZWRpY3Rpb25zKCk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50
cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRpY3Rpb25zLT5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBlbnRyeS0+bV9saXZlQXJn
dW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChpKQotICAgICAgICAg
ICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAx
KSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnRVcHBlckJvdW5k
KCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50
cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnQoaSk7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoaSA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQg
YmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBh
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghdmFsdWVP
YmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0
aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYo
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxu
IiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIHByZWRpY3Rpb25Ub1N0
cmluZyhwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSk7CisgICAgICAgICAg
ICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVj
dGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIGFjdGlv
bmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9mVmFyaWFibGVzKCk7ICsraSkgewotICAgICAg
ICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVudHJ5LT5tX2xpdmVW
YXJpYWJsZXMuZ2V0KGkpCi0gICAgICAgICAgICAmJiAhcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFs
RGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJl
ZGljdGlvbihpKSkpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cnktPm1fcHJl
ZGljdGlvbnMudmFyaWFibGVVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxl
UHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGUoaSk7
CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRp
Y3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYo
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxu
IiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCksIHByZWRp
Y3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpOworICAgICAgICAg
ICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBl
Y3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlv
bigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEyOSw3ICsxMTksNyBAQCB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgaWYgKCFnbG9i
YWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJz
KClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNr
IGdyb3d0aCBmYWlsZWQuLlxuIik7CisgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2
aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAog
I2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5j
bHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5
LDggKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB1
bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNl
dDsKLSAgICBCaXRWZWN0b3IgbV9saXZlQXJndW1lbnRzOwotICAgIEJpdFZlY3RvciBtX2xpdmVW
YXJpYWJsZXM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIG1fcHJlZGljdGlvbnM7CiB9Owog
CiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURh
dGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsMTUgKzU1OCwxNiBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJl
bmNlRXJyb3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBk
b2Vzbid0IGRvIGFueXRoaW5nLgotICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJl
Y3Q6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdl
dHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisgICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1OTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Niw2
ICs3OTYsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXRB
cmd1bWVudDoKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wOyBpdCBqdXN0IG1hcmtzIHRoZSBm
YWN0IHRoYXQgdGhlIGFyZ3VtZW50IGlzIGJlaW5nIHVzZWQuCisgICAgICAgIC8vIEJ1dCBpdCBt
YXkgYmUgcHJvZml0YWJsZSB0byB1c2UgdGhpcyBhcyBhIGhvb2sgdG8gcnVuIHNwZWN1bGF0aW9u
IGNoZWNrcworICAgICAgICAvLyBvbiBhcmd1bWVudHMsIHRoZXJlYnkgYWxsb3dpbmcgdXMgdG8g
dHJpdmlhbGx5IGVsaW1pbmF0ZSBzdWNoIGNoZWNrcyBpZgorICAgICAgICAvLyB0aGUgYXJndW1l
bnQgaXMgbm90IHVzZWQuCisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAg
Y2FzZSBCaXRPcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRW
ZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2Vk
SW50VmVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFja2VkSW50VmVjdG9y
X2gKKyNkZWZpbmUgUGFja2VkSW50VmVjdG9yX2gKKworI2luY2x1ZGUgIkJpdFZlY3Rvci5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBjbGFzcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBh
biBhcnJheSBvZiBpbnRlZ2Vycywgd2hlcmUgdGhvc2UKKy8vIGludGVnZXJzIGhhdmUgb25seSBh
IGhhbmRmdWwgb2YgYml0cyBlYWNoLiBJdCBpcyBub3QgbWVhbnQgdG8gYmUKKy8vIGVmZmljaWVu
dCBpbiB0aW1lLCBidXQgb25seSBpbiBzcGFjZS4gKFRob3VnaCBtYWtpbmcgaXQgZWZmaWNpZW50
CisvLyBpbiB0aW1lIGZvciBwb3dlci1vZi0yIHZhbHVlcyBvZiBiaXRDb3VudCB3b3VsZCBub3Qg
YmUgZGlmZmljdWx0LikKKy8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0
ZWQgZm9yIHNpZ25lZCB0eXBlcywgaWYgeW91CisvLyBhcmUgcmVseWluZyBvbiB0aGUgc2lnbiBi
ZWluZyBwcmVzZXJ2ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGJpdENvdW50
PgorY2xhc3MgUGFja2VkSW50VmVjdG9yIHsKK3B1YmxpYzoKKyAgICBQYWNrZWRJbnRWZWN0b3Io
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdENvdW50KTsKKyAgICAgICAgQVNTRVJUKGJpdENv
dW50IDwgc2l6ZW9mKHZvaWQqKSAqIDgpOworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJbnRWZWN0
b3IoY29uc3QgUGFja2VkSW50VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHMob3RoZXIu
bV9iaXRzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yJiBvcGVyYXRv
cj0oY29uc3QgUGFja2VkSW50VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYml0cyA9
IG90aGVyLm1fYml0czsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iaXRzLnNpemUoKSAv
IGJpdENvdW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUlu
dHMpCisgICAgeworICAgICAgICBtX2JpdHMuZW5zdXJlU2l6ZShudW1JbnRzICogYml0Q291bnQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtSW50cykKKyAgICB7Cisg
ICAgICAgIG1fYml0cy5yZXNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbGVhckFsbCgpCisgICAgeworICAgICAgICBtX2JpdHMuY2xlYXJBbGwoKTsKKyAg
ICB9CisgICAgCisgICAgVCBnZXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
dWludHB0cl90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSAw
OyBzdWJJbmRleCA8IGJpdENvdW50OyArK3N1YkluZGV4KSB7CisgICAgICAgICAgICByZXN1bHQg
PDw9IDE7CisgICAgICAgICAgICByZXN1bHQgfD0gbV9iaXRzLmdldChpbmRleCAqIGJpdENvdW50
ICsgc3ViSW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihy
ZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgaW5kZXgsIFQgdmFsdWUp
CisgICAgeworICAgICAgICAvLyBEbyBhcml0aG1ldGljIHVzaW5nIHVpbnRwdHJfdCwgYmVjYXVz
ZSAoMSkgd2Uga25vdyB3aGF0IGl0IGlzCisgICAgICAgIC8vIChUIG1pZ2h0IGJlIGFuIGVudW0p
IGFuZCAoMikgaXQncyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHR5cGUgdGhhdAorICAgICAgICAvLyBp
cyBsaWtlbHkgdG8gcGVyZm9ybSBkZWNlbnRseSB3ZWxsLgorICAgICAgICB1aW50cHRyX3QgbXlW
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAgICAgICAKKyAgICAgICAg
Ly8gUHJlbGltaW5hcnkgc2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZhbHVlIGlzIG5vdCBvdXQgb2Yg
cmFuZ2UuCisgICAgICAgIEFTU0VSVCgobXlWYWx1ZSAmIG1hc2soKSkgPT0gbXlWYWx1ZSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gYml0Q291bnQ7IHN1Yklu
ZGV4LS0gPiAwOykgeworICAgICAgICAgICAgbV9iaXRzLnNldChpbmRleCAqIGJpdENvdW50ICsg
c3ViSW5kZXgsICEhKG15VmFsdWUgJiAxKSk7CisgICAgICAgICAgICBteVZhbHVlID4+PSAxOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbCBzYW5pdHkgY2hlY2sgdGhhdCB3
ZSBzdG9yZWQgd2hhdCB0aGUgdXNlciB0aG91Z2h0IHdlCisgICAgICAgIC8vIHN0b3JlZC4KKyAg
ICAgICAgQVNTRVJUKGdldChpbmRleCkgPT0gdmFsdWUpOworICAgIH0KK3ByaXZhdGU6CisgICAg
Ly8gVGhpcyByZXR1cm5zIHRoZSBtYXNrLCBhbmQgaXMgY2FyZWZ1bCB0byBub3Qgc3RlcCBvbiB0
aGUgd3JhcC1hcm91bmQKKyAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIHNoaWZ0IGFtb3VudCAoMSA8
PCAzMiBpcyAxIHNpbmNlIDMyIHdyYXBzIHRvIDApLiBUaGVyZQorICAgIC8vIGlzIHRoZSBzZXBh
cmF0ZSBxdWVzdGlvbiBvZiB3aHkgeW91IHdvdWxkIGV2ZXIgdXNlIHRoaXMgdG8gc3RvcmUgMzIt
Yml0CisgICAgLy8gb3IgNjQtYml0IHZhbHVlcywgYnV0IGl0J3MgcHJvYmFibHkgYmV0dGVyIHRv
IGhhdmUgdGhpcyB3b3JrIGFzIGV4cGVjdGVkCisgICAgLy8gaW4gc3VjaCBzaXR1YXRpb25zIHJl
Z2FyZGxlc3MuCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYXNrKCkgeyByZXR1cm4gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMikgPDwgKGJpdENvdW50IC0gMSkpIC0gMTsgfQorICAgICAgICAgICAg
ICAgCisgICAgLy8gU3RvcmVzIGludGVnZXJzIGJpdCBieSBiaXQgaW4gYmlnIGVuZGlhbi4KKyAg
ICBCaXRWZWN0b3IgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UGFja2VkSW50VmVjdG9yOworCisjZW5kaWYgLy8gUGFja2VkSW50VmVjdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFVuaW9uRmluZF9oCisjZGVmaW5lIFVuaW9uRmluZF9oCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBVbmlvbkZpbmQgY2xhc3Mg
Y2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBkaXNqb2ludCBzZXRzIHVzaW5nIHRoZQorLy8gZGlzam9p
bnQtc2V0IGZvcmVzdCBkYXRhIHN0cnVjdHVyZS4gRWFjaCBVbmlvbkZpbmQgaW5zdGFuY2UgaXMg
YQorLy8gbm9kZSBpbiB0aGUgZm9yZXN0LiBUeXBpY2FsbHkgeW91IHVzZSBpdCBieSB1c2luZyBV
bmlvbkZpbmQgYXMgYQorLy8gc3VwZXJjbGFzcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIFVuaW9uRmluZCB7CitwdWJsaWM6CisgICAgVW5pb25GaW5kKCkKKyAgICAgICAgOiBtX3Bh
cmVudCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVCogZmluZCgpCisgICAgeworICAgICAg
ICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgICAgIFQqIG5leHQgPSBy
ZXN1bHQtPm1fcGFyZW50OworICAgICAgICB3aGlsZSAobmV4dCkgeworICAgICAgICAgICAgcmVz
dWx0ID0gbmV4dDsKKyAgICAgICAgICAgIG5leHQgPSByZXN1bHQtPm1fcGFyZW50OworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IHRoaXMp
CisgICAgICAgICAgICBtX3BhcmVudCA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgdm9pZCB1bmlmeShUKiBvdGhlcikKKyAgICB7CisgICAgICAgIFQq
IGEgPSBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmZpbmQoKTsKKyAgICAgICAgVCogYiA9IG90aGVy
LT5maW5kKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWEtPm1fcGFyZW50KTsKKyAgICAg
ICAgQVNTRVJUKCFiLT5tX3BhcmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYS0+bV9wYXJlbnQgPSBiOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgVCogbV9wYXJlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpVbmlvbkZpbmQ7CisKKyNlbmRpZiAvLyBVbmlvbkZpbmRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108794</attachid>
            <date>2011-09-26 23:50:53 -0700</date>
            <delta_ts>2011-09-27 14:53:29 -0700</delta_ts>
            <desc>starting to work</desc>
            <filename>liverangesplit_patch_5.diff</filename>
            <type>text/plain</type>
            <size>83085</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYwNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAK
KzIwMTEtMDktMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGlv
blRyYWNrZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYW5kSXNBcmd1bWVu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpn
ZXRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6dmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjps
b2NhbCk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAg
ICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
Ojpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpWYWx1ZVNvdXJjZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3Vy
Y2U6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXhGcm9tS2luZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmtpbmRGcm9tTm9kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
ICogd3RmL1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50
VmVjdG9yOjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAg
ICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBh
Y2tlZEludFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpj
bGVhckFsbCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAg
KFdURjo6UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0
b3I6Om1hc2spOgorICAgICAgICAqIHd0Zi9VbmlvbkZpbmQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlVuaW9uRmluZDo6VW5pb25GaW5kKToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjpmaW5k
KToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjp1bmlmeSk6CisKIDIwMTEtMDktMjYgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyOTU5
MTIpOiBDb25zZXJ2YXRpdmUgbWFya2luZyBkb2Vzbid0IGZpbHRlciBvdXQgcG9pbnRlcnMgdG8K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NTkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwxMCBAQAogCQkwQkRGRkFFMDBGQzYxOTI5
MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jv
c3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQ
dHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZG
QUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4
Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICov
OyB9OworCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZENzI0MTQyQzM5QTIw
MENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjA0RThBMTQyRDY5
NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovOyB9OworCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CisJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNGNzUz
QkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1Ry
ZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
Rjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5
QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0g
Ii1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTY1LDYgKzY3LDcgQEAKIAkJMEZEM0M4
MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZH
RHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3Bh
Z2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CiAJCTBGRDND
ODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLzsgfTsKKwkJMEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENTJBQUMx
NDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdD
YXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87
IH07CiAJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFB
QjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0IC8q
IFByZWRpY3RlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc5Myw4ICs3OTYs
MTAgQEAKIAkJMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duRmFzdE1hbGxvY1B0ci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jv
c3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
b3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYy
OEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNjA0RThB
MTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQ
cmVkaWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGlvbmFibGVQ
cmVkaWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZE
RDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJs
YWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxMCw2ICs4MTUsNyBAQAogCQkwRkQz
QzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMzE0MTE1RDFBMDBGRDgxQ0IgLyogREZHUHJv
cGFnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcm9w
YWdhdG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGFnYXRvci5oOyBwYXRo
ID0gZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZE
NTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmlvbkZpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0g
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIx
NDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTgxNCw3ICsxODIwLDkgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0
ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY2MDRF
OEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8sCisJCQkJMEZENTJBQUMxNDMw
MzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovLAorCQkJCTBGNjM2RDlGMTQyRDI3RDIwMEIy
RTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLywKKwkJCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4
NEEgLyogQml0VmVjdG9yLmNwcCAqLywKIAkJCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyog
Qml0VmVjdG9yLmggKi8sCiAJCQkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8s
CiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKQEAgLTIzNDEsNiArMjM0
OSw3IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY2MzZEQTExNDJEMjdFRDAw
QjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8sCiAJCQkJMEZEODJFOEUxNDIwN0E1
MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZEODJFODQxNDFGM0ZEQTAw
MTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovLAogCQkJCTBGRDgyRTRGMTQxREFFQTEwMDE3
OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi8sCkBAIC0yODI0LDcgKzI4MzMsMTAgQEAKIAkJCQkx
QTA4Mjc3QTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzA0NTZCMDE0MjdGQjkxMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFj
a2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2
NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEz
MTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ1MkFB
RTE0MzAzNUEwMDAyNkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMxMzgs
NiArMzE1MCw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRjE2RDcyNjE0MkMzOUMw
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRjJDMTQy
NkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMzM0OSw3ICszMzYyLDYgQEAKIAkJCQkxQTA4Mjc3OTE0MjE2
OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIgLyogQml0VmVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisjZGVmaW5lIEFj
dGlvbmFibGVQcmVkaWN0aW9uX2gKKworI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJK
U1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9QYWNr
ZWRJbnRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFuIGFjdGlvbmFibGUgcHJl
ZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNlZCBvbiBzdG9yZXMgdG8gbG9jYWwgdmFyaWFi
bGVzCisvLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hlbiBwYXNzaW5nIGFyZ3VtZW50cyB0byBmdW5j
dGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQKKy8vIGluIENvZGVCbG9jay4KKworZW51bSBB
Y3Rpb25hYmxlUHJlZGljdGlvbiB7CisgICAgTm9BY3Rpb25hYmxlUHJlZGljdGlvbiwKKyAgICBF
bmZvcmNlSW50MzJQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VBcnJheVByZWRpY3Rpb24sCisgICAg
RW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCit9OworCitpbmxpbmUgQWN0aW9uYWJsZVByZWRpY3Rp
b24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24pCit7CisgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAg
ICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlQXJyYXlQcmVk
aWN0aW9uOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOworICAgIAorICAgIHJldHVy
biBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworfQorCitpbmxpbmUgYm9vbCB2YWx1ZU9iZXlzUHJl
ZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUsIEFjdGlvbmFi
bGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVkaWN0aW9uKSB7Cisg
ICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gdmFsdWUuaXNJ
bnQzMigpOworCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOgorICAgICAgICByZXR1
cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKKworICAgIGNhc2UgRW5mb3JjZUJvb2xl
YW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJs
ZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBj
b25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKEFjdGlvbmFibGVQcmVkaWN0
aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVkaWN0aW9uKSB7CisgICAgY2FzZSBF
bmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VJbnQzMiI7Cisg
ICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJu
ICJFbmZvcmNlQXJyYXkiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGlj
dGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQm9vbGVhbiI7CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rp
b24pOworICAgICAgICByZXR1cm4gIk5vQWN0aW9uYWJsZVByZWRpY3Rpb24iOworICAgIH0KK30K
KwordHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0aW9uYWJsZVByZWRpY3Rpb24sIDI+IEFjdGlv
bmFibGVQcmVkaWN0aW9uVmVjdG9yOworCitjbGFzcyBBY3Rpb25hYmxlUHJlZGljdGlvbnMgewor
cHVibGljOgorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucygpIHsgfQorCisgICAgQWN0aW9uYWJs
ZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVz
KQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5zdXJlU2l6ZShudW1Bcmd1bWVudHMpOwor
ICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXplKG51bVZhcmlhYmxlcyk7CisgICAgICAgIG1f
YXJndW1lbnRzLmNsZWFyQWxsKCk7CisgICAgICAgIG1fdmFyaWFibGVzLmNsZWFyQWxsKCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIEFjdGlv
bmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KGFy
Z3VtZW50LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFy
Z3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50ID49
IG1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVk
aWN0aW9uOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMuZ2V0KGFyZ3VtZW50KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRWYXJpYWJsZSh1bnNpZ25lZCB2YXJpYWJsZSwgQWN0aW9uYWJs
ZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBtX3ZhcmlhYmxlcy5zZXQodmFyaWFi
bGUsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFyaWFi
bGUodW5zaWduZWQgdmFyaWFibGUpCisgICAgeworICAgICAgICBpZiAodmFyaWFibGUgPj0gbV92
YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rp
b247CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlcy5nZXQodmFyaWFibGUpOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVyQm91bmQoKSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCB2YXJpYWJsZVVwcGVyQm91bmQoKSBjb25z
dCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAKKyAgICB2b2lkIHBhY2soKQor
ICAgIHsKKyAgICAgICAgcGFja1ZlY3RvcihtX2FyZ3VtZW50cyk7CisgICAgICAgIHBhY2tWZWN0
b3IobV92YXJpYWJsZXMpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQg
cGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciYgdmVjdG9yKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHZlY3Rvci5n
ZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgICAgICBsYXN0U2V0
SW5kZXggPSBpOworICAgICAgICB9CisgICAgICAgIHZlY3Rvci5yZXNpemUobGFzdFNldEluZGV4
ICsgMSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yIG1fYXJn
dW1lbnRzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yIG1fdmFyaWFibGVzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBY3Rpb25hYmxlUHJlZGljdGlvbl9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDkgKzI0MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQo
KTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkg
eyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gcHJlZGljdGlv
bnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zOyB9Ci0gICAgICAgIFByZWRpY3Rpb25U
cmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0KCk7
IH0KLQogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAgICAgICAg
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCkBAIC05NzUsOCArOTcy
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRl
cm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9w
cmVkaWN0aW9uczsKLQogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CiAgICAgICAg
IHVpbnQzMl90IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKICAgICAgICAgdWludDMyX3Qg
bV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDk1OTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDEzICsyOCw5IEBACiAKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAm
IHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1l
bnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9Ci0KIHN0cnVjdCBQcmVkaWN0
aW9uU2xvdCB7CiBwdWJsaWM6CiAgICAgUHJlZGljdGlvblNsb3QoKQpAQCAtNTAsNDYgKzQ2LDYg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGlvblRyYWNrZXIodW5z
aWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCi0gICAgICAgIDogbV9h
cmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fdmFyaWFibGVzKG51bVZhcmlhYmxl
cykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZVNpbWlsYXJUbyhjb25z
dCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0gICAgewotICAgICAgICBtX2FyZ3VtZW50cy5y
ZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIG1fdmFyaWFibGVzLnJl
c2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0gICAgewotICAg
ICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRzOwotICAgICAgICBtX3ZhcmlhYmxl
cyA9IG90aGVyLm1fdmFyaWFibGVzOwotICAgIH0KLSAgICAKLSAgICBzaXplX3QgbnVtYmVyT2ZB
cmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KLSAgICBzaXpl
X3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChpbnQgb3BlcmFu
ZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQotCi0gICAgYm9vbCBwcmVkaWN0QXJndW1lbnQo
dW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWUs
IHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQs
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQoYXJn
dW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCksIHByZWRpY3Rpb24pOwotICAgICAgICBpZiAo
KHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQob3BlcmFuZCA+PSAwKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVy
YW5kICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtZXJnZVByZWRp
Y3Rpb24obV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZSwgcHJlZGljdGlvbik7Ci0gICAgfQot
ICAgIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFBy
ZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJl
ciArIDEpOwpAQCAtMTAyLDIwICs1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1lcmdl
UHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgcHJlZGljdGlvbik7CiAgICAgfQogICAg
IAotICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3Vt
ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVl
OwotICAgIH0KLQotICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkK
LSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAg
ICAgIHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQo
b3BlcmFuZCkpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5z
aXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsK
LSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIH0KLSAgICAKICAgICBQcmVkaWN0ZWRU
eXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsKICAg
ICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0g
bV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CkBAIC0xMjUsOCArNjcsNiBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2
PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX3ZhcmlhYmxl
czsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9nbG9iYWxWYXJzOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDk1OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDE1IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzUGhpU3RhY2soKTsKICAgICAvLyBBZGQgc3BpbGwgbG9j
YXRpb25zIHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0K
KyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShpbnQg
b3BlcmFuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpKTsKKyAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmxhc3QoKTsKKyAgICB9CisgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCiAgICAgTm9kZUluZGV4IGdldChpbnQgb3Bl
cmFuZCkKICAgICB7CkBAIC0xMTYsNyArMTI0LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIGlu
IGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2Nh
bCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9sb2Nh
bHNbb3BlcmFuZF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWU7CiAKICAgICAgICAgaWYgKG5v
ZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07CkBAIC0xMjksMTYgKzEzNywyMSBAQCBwcml2YXRlOgogICAgICAgICAvLyBDaGVj
ayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCiAgICAgICAgIC8v
IGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCiAgICAgICAgIG1fcHJlc2Vy
dmVkVmFycyA9IHN0ZDo6bWF4KG1fcHJlc2VydmVkVmFycywgb3BlcmFuZCArIDEpOwotCi0gICAg
ICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgIAorICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dy
YXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkp
OwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8ob3BlcmFu
ZCksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1
ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVyYW5kXS5zZXRGaXJzdFRp
bWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAg
fQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQog
ICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRdLnZhbHVlID0g
YWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgo
U2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdo
ZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50LgpAQCAtMTQ3LDIwICsxNjAsMzQgQEAgcHJp
dmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAg
ICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZh
bHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgaWYgKG5v
ZGUub3AgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5n
IGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluaworICAgICAgICAgICAg
ICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJh
bmQpKTsKKyAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9
IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUu
Y2hpbGQxKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChub2Rl
Lm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4Owor
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9
IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhp
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwot
ICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8ob3BlcmFuZCks
IHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1bWVudF0udmFs
dWUgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAg
ICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5z
ZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5k
ZXg7CiAgICAgfQogICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2
YWx1ZSkKQEAgLTE2OCw3ICsxOTUsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzW2FyZ3Vt
ZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZh
bHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBl
cmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCkBAIC02ODgsNiArNzE1
LDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KKyAgICAKKyAg
ICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBm
b3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cworICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9m
IGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCisgICAg
Ly8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgorICAgIGlmICgh
bV9jdXJyZW50SW5kZXgpIHsKKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9u
dW1Bcmd1bWVudHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZUluZGV4
IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShhcmd1bWVudCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OworICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1l
bnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3Vt
ZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOworICAgICAgICB9CisgICAgfQogCiAgICAg
SW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKQEAgLTE0MjEsMjAgKzE0NjEsMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgCiAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYg
cHJlZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CiAgICAgICAgIHVu
c2lnbmVkIHZhck5vID0gZW50cnkubV92YXJObzsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBkYXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAgIFZhcmlhYmxl
UmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNz
b3JCbG9jay0+bV9hcmd1bWVudHNbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNb
dmFyTm9dOworICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0g
QXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2
YXJOb10gOiBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107CiAKICAgICAg
ICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7CiAgICAgICAg
ICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgewotICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpKTsKLSAgICAgICAgICAgICAgICB2
YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgdmFsdWVJblBy
ZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyB2YXJObyAtIG1fY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgOiB2YXJObykp
KTsKKyAgICAgICAgICAgICAgICB2YXIuc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7
CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQorICAg
ICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJO
b10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0SGVhZFt2
YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAg
cGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblBy
ZWRlY2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJl
IGlkZW50aWNhbCBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFuZCBp
dHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhlIHR3
bworICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5jeSwg
d2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCisgICAgICAgICAgICAgICAg
Ly8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVjaCBh
cyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFwaFt2YWx1ZUluUHJl
ZGVjZXNzb3JdLmNoaWxkMSgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLmNoaWxkMSgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gUGhpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJl
ZGVjZXNzb3JdLm9wID09IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29y
ID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBkYXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQ
aGkpOwogCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9waGld
OwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCkBAIC0xNDUyLDggKzE1MDgs
OCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAg
ICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Tm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8oZGF0YUZvclBo
aSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnku
bV9waGldOyAvLyByZWxvYWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQogICAgICAgICAgICAgTm9kZSYg
bmV3UGhpTm9kZSA9IG1fZ3JhcGhbbmV3UGhpXTsKQEAgLTE1MjEsNiArMTU3Nyw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlT
dGFjaz4oKTsKICAgICAKICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyA9IG1fcHJlc2VydmVk
VmFyczsKKyAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFw
aC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
OTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5j
dGlvbiwgQ29tcAogaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwg
RXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMs
IGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBHcmFwaCBkZmc7CiAgICAgaWYgKCFwYXJzZShk
ZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
QEAgLTQ3LDE1ICs0Nyw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGls
ZU0KICAgICAKICAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spOwogICAg
IAotICAgIC8vIFNhdmUgdGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVu
dHJ5IGNhbiB2ZXJpZnkgdGhlbS4gUHJlZGljdGlvbnMKLSAgICAvLyBhcmUgc2F2ZWQgaW4gdGhl
IENvZGVCbG9jayBmcm9tIHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0
aGUKLSAgICAvLyBDb2RlQmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFj
ZWQgYXQgYW55IHRpbWUuCi0gICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9u
cyA9IGFkb3B0UHRyKG5ldyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKLSAgICAqcHJlZGljdGlvbnMg
PSBkZmcucHJlZGljdGlvbnMoKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0
UHJlZGljdGlvbnMocHJlZGljdGlvbnMucmVsZWFzZSgpKTsKLSAgICAKICAgICBKSVRDb21waWxl
ciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CiAgICAgaWYgKGNvbXBp
bGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzOSBAQCBjb25zdCBjaGFyICpHcmFwaDo6b3BO
YW1lKE5vZGVUeXBlIG9wKQogICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107
CiB9CiAKK2NvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEpCit7CisgICAgLy8gVmFyaWFibGVzIGFy
ZSBhbHJlYWR5IG51bWJlcmVkLiBGb3IgcmVhZGFiaWxpdHkgb2YgSVIgZHVtcHMsIHRoaXMgcmV0
dXJucworICAgIC8vIGFuIGFscGhhYmV0aWMgbmFtZSBmb3IgdGhlIHZhcmlhYmxlIGFjY2VzcyBk
YXRhLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvCisgICAgLy8gcmVhc29uIGFib3V0IHR3byBu
dW1iZXJzICh2YXJpYWJsZSBudW1iZXIgYW5kIGxpdmUgcmFuZ2UgbnVtYmVyKSwgYnV0IGluc3Rl
YWQKKyAgICAvLyBhIG51bWJlciBhbmQgYSBsZXR0ZXIuCisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICgmbV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0gPT0gdmFyaWFibGVBY2Nlc3NEYXRhKSB7
CisgICAgICAgICAgICBpbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKTsKKyAgICAKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4gIkEi
OworCisgICAgc3RhdGljIGNoYXIgYnVmWzEwXTsKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxj
aGFyPiBwdHIoYnVmLCBzaXplb2YoYnVmKSk7CisgICAgCisgICAgd2hpbGUgKGluZGV4KSB7Cisg
ICAgICAgICpwdHIrKyA9ICdBJyArIChpbmRleCAlIDI2KTsKKyAgICAgICAgaW5kZXggLz0gMjY7
CisgICAgfQorICAgIAorICAgICpwdHIrKyA9IDA7CisgICAgCisgICAgcmV0dXJuIGJ1ZjsKK30K
Kwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKQEAgLTExNiwxMiArMTQ5
LDE0IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAg
ICAgIHByaW50ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5pZGVudGlm
aWVyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KG5vZGUuaGFzTG9jYWwoKSkgewotICAgICAgICBpbnQgbG9jYWwgPSBub2RlLmxvY2FsKCk7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChsb2NhbCkpCi0gICAgICAgICAgICBwcmludGYo
IiVzYXJnJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBsb2NhbCAtIGNvZGVCbG9jay0+dGhp
c1JlZ2lzdGVyKCkpOworICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09
IG5vZGUuaGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
IHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpCisgICAgICAgICAgICBwcmludGYoIiVzYXJnJXUoJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgb3BlcmFuZCAtIGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIG5hbWVPZlZhcmlhYmxl
QWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcHJpbnRmKCIlc3IldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsKTsKKyAgICAg
ICAgICAgIHByaW50ZigiJXNyJXUoJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgb3BlcmFu
ZCwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsK
QEAgLTE0NSw4ICsxODAsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgs
IENvCiAgICAgcHJpbnRmKCIpIik7CiAKICAgICBpZiAoIXNraXBwZWQpIHsKLSAgICAgICAgaWYg
KG5vZGUuaGFzTG9jYWwoKSkKLSAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwg
cHJlZGljdGlvblRvU3RyaW5nKGdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKSkpOworICAgICAg
ICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIHByaW50Zigi
ICBwcmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICBlbHNlIGlmIChub2RlLmhhc1Zhck51bWJl
cigpKQogICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9T
dHJpbmcoZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKSkpOwogICAgICAg
ICBlbHNlIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKQEAgLTIwNCwxMCArMjM5LDEwIEBAIHZv
aWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHZvaWQgR3JhcGg6OnByZWRpY3RB
cmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgaWYgKGV4ZWMpIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjpt
aW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9wcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3Rk
OjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudHMuc2l6
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IG51bWJl
ck9mQXJndW1lbnRzOyArK2FyZykKLSAgICAgICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFy
Z3VtZW50KGFyZywgcHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChhcmcgLSAxKSkp
OworICAgICAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChhcmcgLSAxKSkpOwog
ICAgIH0KICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKQEAgLTIyMCwxMCArMjU1LDEwIEBA
IHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgaWYgKCFw
cm9maWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBtX3ByZWRp
Y3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbigpKTsKKyAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOwogICAgICAg
ICAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiQXJndW1l
bnQgWyVsdV0gcHJlZGljdGlvbjogJXNcbiIsIGFyZywgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJl
ZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKKyAgICAgICAgcHJpbnRmKCJB
cmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9uVG9TdHJpbmco
YXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkp
OwogI2VuZGlmCiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBu
YW1lc3BhY2UgREZHIHsKIAorLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMg
JiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29sIG9wZXJhbmRJc0FyZ3Vt
ZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQorCiB0eXBlZGVmIHVpbnQz
Ml90IEJsb2NrSW5kZXg7CiAKIC8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFjayBh
bnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCkBAIC01Myw2ICs1NiwxMiBAQCBz
dHJ1Y3QgVmFyaWFibGVSZWNvcmQgewogICAgICAgICA6IHZhbHVlKE5vTm9kZSkKICAgICB7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0Rmlyc3RUaW1lKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsdWUgPT0gTm9Ob2RlKTsKKyAgICAgICAgdmFsdWUgPSBu
b2RlSW5kZXg7CisgICAgfQogCiAgICAgTm9kZUluZGV4IHZhbHVlOwogfTsKQEAgLTExMCw4ICsx
MTksMTAgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIGJlZ2luKGJlZ2luKQogICAg
ICAgICAsIGVuZChOb05vZGUpCiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAg
ICwgbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fbG9jYWxzKG51bUxvY2Fs
cykKKyAgICAgICAgLCBtX2FyZ3VtZW50c0F0SGVhZChudW1Bcmd1bWVudHMpCisgICAgICAgICwg
bV9sb2NhbHNBdEhlYWQobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRUYWlsKG51
bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0VGFpbChudW1Mb2NhbHMpCiAgICAgewog
ICAgIH0KIApAQCAtMTI2LDggKzEzNywxMiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgYm9v
bCBpc09TUlRhcmdldDsKIAogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKLSAg
ICBWZWN0b3IgPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3IgPFZh
cmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHM7CisgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2
PiBtX2xvY2Fsc0F0SGVhZDsKKyAgICAKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1f
YXJndW1lbnRzQXRUYWlsOworICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxz
QXRUYWlsOwogfTsKIAogLy8gCkBAIC0xMzgsMTEgKzE1Myw2IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJl
ZkNvdW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKIHB1Ymxp
YzoKLSAgICBHcmFwaCh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxl
cykKLSAgICAgICAgOiBtX3ByZWRpY3Rpb25zKG51bUFyZ3VtZW50cywgbnVtVmFyaWFibGVzKQot
ICAgIHsKLSAgICB9Ci0KICAgICAvLyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZlcmVuY2VkLgog
ICAgIHZvaWQgcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTcxLDE2ICsxODEs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3NbYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGlvblRy
YWNrZXImIHByZWRpY3Rpb25zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
OwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRp
Y3Qob3BlcmFuZCwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAogICAgIGJvb2wgcHJlZGljdEds
b2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3RHbG9iYWxWYXIodmFyTnVt
YmVyLCBwcmVkaWN0aW9uKTsKQEAgLTE5MCwxMSArMTkwLDEyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAg
ICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFBoaToKKyAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVy
KCksIHByZWRpY3Rpb24pOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZDoKICAgICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkBAIC0y
MTIsMTEgKzIxMyw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFByZWRpY3Rl
ZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3ByZWRpY3Rpb25zLmdldFByZWRpY3Rpb24ob3BlcmFuZCk7Ci0gICAgfQotICAgIAogICAgIFBy
ZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRHbG9iYWxWYXJQcmVkaWN0aW9u
KHZhck51bWJlcik7CkBAIC0yNDQsNyArMjQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG5vZGVQdHItPmxvY2FsKCkpOworICAgICAgICBj
YXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICBjYXNlIFBo
aToKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdGlvbigpOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgICAgIHJldHVy
biBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsKICAgICAgICAg
Y2FzZSBHZXRCeUlkOgpAQCAtMzI0LDYgKzMyMyw5IEBAIHB1YmxpYzoKIAogI2lmbmRlZiBOREVC
VUcKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIE8obiksIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciB2ZXJib3NlIGR1bXBz
LgorICAgIGNvbnN0IGNoYXIqIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSk7CiAjZW5kaWYKIAogICAgIHZvaWQgcHJlZGljdEFy
Z3VtZW50VHlwZXMoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CkBAIC0zMzMsNyArMzM1LDEwIEBA
IHB1YmxpYzoKICAgICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsK
ICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAg
VmVjdG9yPFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOworICAgIFZlY3Rv
cjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJs
ZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3By
ZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9w
YXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDQw
ICszOTMsMjMgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBP
U1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShi
YXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUs
IGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQg
PSAwOwotICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUxvY2FsID0gMDsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1
ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAg
ICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9j
ay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6
ZSgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2Fy
Z3VtZW50c0F0SGVhZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgICAg
ICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJl
ZGljdGlvbnMuc2V0QXJndW1lbnQoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVk
VHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmFzaWNCbG9jay5tX2xvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGJh
c2ljQmxvY2subV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGxh
c3RMaXZlTG9jYWwgPSBpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAg
ICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxl
UHJlZGljdGlvbnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVu
dCkgewotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVB
cmd1bWVudCArIDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFs
bCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9
IGxhc3RMaXZlQXJndW1lbnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2Nr
Lm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50
cnktPm1fbGl2ZUFyZ3VtZW50cy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGxhc3RMaXZlTG9jYWwpIHsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVWYXJpYWJsZXMucmVzaXplKGxhc3RMaXZlTG9jYWwgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5
LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAg
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2V0KGkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMu
Y2xlYXJBbGwoKTsKKyAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsKKyAgICAg
ICAgCisgICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25z
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTU5MzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0
IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVt
cGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJP
U0UgMApAQCAtMTA4LDYgKzEwOSw1MSBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNv
ZGVJbmRleDsKIH07CiAKK2NsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
KQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsKQorICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgICwgbV9w
cmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+
bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xvY2FsOworICAgIH0KKyAgICAKKyAgICBpbnQg
b3BlcmFuZCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRp
Y3Rpb24sIHByZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmlj
aWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCisgICAgLy8gd2lsbCBoYXZl
IHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1
dAorICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBk
b24ndCBleHBlY3QgREZHIHNwYWNlCisgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBu
b2RlcyBkbyBiZSBzaWduaWZpY2FudC4KKworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwor
ICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOworfTsKKwogdHlwZWRlZiB1bnNpZ25lZCBB
cml0aE5vZGVGbGFnczsKICNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4MDAKICNkZWZpbmUg
Tm9kZVVzZWRBc051bWJlciAgIDB4MDEKQEAgLTIyMyw2ICsyNjksOSBAQCBzdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoaSwgMCkgXAogICAgIFwKKyAgICAvKiBNYXJrZXIgZm9y
IGFyZ3VtZW50cyBiZWluZyBzZXQuICovXAorICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCisg
ICAgXAogICAgIC8qIE5vZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3Jv
KEJpdEFuZCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oQml0T3IsIE5vZGVSZXN1bHRJ
bnQzMikgXApAQCAtNDU3LDE1ICs1MDYsMzIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2spLmlzQm9v
bGVhbigpOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBo
YXNMb2NhbCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AgPT0gR2V0TG9jYWwgfHwgb3AgPT0g
U2V0TG9jYWw7CisgICAgICAgIHJldHVybiBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICB9
Ci0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEq
PihtX29wSW5mbyktPmZpbmQoKTsKKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNMb2NhbCgpKTsKLSAgICAgICAgcmV0dXJu
IChWaXJ0dWFsUmVnaXN0ZXIpbV9vcEluZm87CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+bG9jYWwoKTsKICAgICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMjMgKzM1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1pbmxpbmUgYm9vbCBwcmVkaWN0aW9uSXNWYWxpZChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTVmFsdWUgdmFsdWUsIFByZWRpY3RlZFR5cGUgdHlwZSkKLXsKLSAgICAvLyB0aGlzIHRh
a2VzIGludG8gYWNjb3VudCBvbmx5IGxvY2FsIHZhcmlhYmxlIHByZWRpY3Rpb25zIHRoYXQgZ2V0
IGVuZm9yY2VkCi0gICAgLy8gb24gU2V0TG9jYWwuCi0gICAgCi0gICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKHR5cGUpKQotICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotICAgIAotICAg
IGlmIChpc0FycmF5UHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShn
bG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgCi0gICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odHlw
ZSkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAjaWYgRU5BQkxFKERG
R19PU1JfRU5UUlkpCkBAIC02Niw3ICs0OSw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVj
U3RhdGUqIGV4ZWMsIEMKICNlbmRpZgogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIAogICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwpAQCAtOTUsMjYgKzc3LDM0IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
IGV4ZWMsIEMKICAgICAvLyAgICBpbnRvIGEgbGVzcy1saWtlbHkgcGF0aC4gU28sIHRoZSB3aXNl
c3QgY291cnNlIG9mIGFjdGlvbiBpcyB0byBzaW1wbHkgbm90CiAgICAgLy8gICAgT1NSIGF0IHRo
aXMgdGltZS4KICAgICAKLSAgICBQcmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMgPSBiYXNl
bGluZUNvZGVCbG9jay0+cHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICBpZiAocHJlZGljdGlvbnMt
Pm51bWJlck9mQXJndW1lbnRzKCkgPiBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
cHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAoaSA8
IGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2l6ZSgpICYmIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMu
Z2V0KGkpCi0gICAgICAgICAgICAmJiAhcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhl
Yy0+YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkp
KSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5h
cmd1bWVudFVwcGVyQm91bmQoKTsgKytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9u
IHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKKyAgICAgICAg
aWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGlmIChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRm
KCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IHdhcyBub3QgcGFzc2VkLCBleHBl
Y3RlZCAlcy5cbiIsIGksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikp
OworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVu
dChpIC0gMSksIHByZWRpY3Rpb24pKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAl
cywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24o
KSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24o
aSkpKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVu
dCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVz
Y3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5zaXplKCkg
JiYgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVkaWN0
aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHBy
ZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZVVwcGVyQm91bmQoKTsgKytpKSB7Cisg
ICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0
aW9ucy52YXJpYWJsZShpKTsKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxl
UHJlZGljdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYg
KCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5q
c1ZhbHVlKCksIHByZWRpY3Rpb24pKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAl
cywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVz
Y3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9u
KGkpKSk7CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFi
bGUgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNW
YWx1ZSgpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGlj
dGlvbikpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5
LDcgKzExOSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAKICAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93
KCZleGVjLT5yZWdpc3RlcnMoKVtjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBwcmludGYoIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC4uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICNlbmRpZgog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5oCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBERkdPU1JFbnRyeV9oCiAjZGVmaW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgPHd0Zi9C
aXRWZWN0b3IuaD4KKyNpbmNsdWRlICJBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzksOCArMzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JF
bnRyeURhdGEgewogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBt
X21hY2hpbmVDb2RlT2Zmc2V0OwotICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1bWVudHM7Ci0gICAg
Qml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9w
cmVkaWN0aW9uczsKIH07CiAKIGlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29k
ZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOSwxNCArMzE5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24gPSBtX2dyYXBoLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV0pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTU4LDE1ICs1
NTgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJv
d1JlZmVyZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KLSAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRC
eUlkRGlyZWN0OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgorICAgICAg
ICBjYXNlIFBoYW50b206CisgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTkzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsNyArMTU1LDIwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29u
c3QKIHsKLSAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIGZwcmludGYo
b3V0LCAiTm90U2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICJJblJlZ0ZpbGUiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIklu
dDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmlu
dGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKQEAgLTIwMyw5
ICsyMTYsOSBAQCBPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoCiB7CiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkpOwogICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1l
bnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kRm9yQXJndW1lbnQoYXJn
dW1lbnQpLCBqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CisgICAgICAgIG1fYXJndW1lbnRz
W2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50
c1thcmd1bWVudF0pOwogICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8
IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFy
aWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YXJpYWJsZSwgaml0LT5tX3Zh
cmlhYmxlc1t2YXJpYWJsZV0pOworICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQt
PmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKIH0K
IAogI2lmbmRlZiBOREVCVUcKQEAgLTY5NSw3ICs3MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2Nh
bDogewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2ppdC5ncmFwaCgpLmdl
dFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBh
dHRlbXB0IHRvIGNvbXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25l
KSB7CkBAIC03NzAsNyArNzgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgICAgfHwgKCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5l
eHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleEZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICAKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5n
ZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAg
ICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KG5vZGUubG9jYWwoKSkpOwpAQCAtNzkzLDkgKzgwNiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0
IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKICAgICAg
ICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lzdGVycyBvciBvdGhlciBsb2Nh
dGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoKTsKKyAgICAgICAgdmFsdWVT
b3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZTo6Zm9y
UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3A7IGl0
IGp1c3QgbWFya3MgdGhlIGZhY3QgdGhhdCB0aGUgYXJndW1lbnQgaXMgYmVpbmcgdXNlZC4KKyAg
ICAgICAgLy8gQnV0IGl0IG1heSBiZSBwcm9maXRhYmxlIHRvIHVzZSB0aGlzIGFzIGEgaG9vayB0
byBydW4gc3BlY3VsYXRpb24gY2hlY2tzCisgICAgICAgIC8vIG9uIGFyZ3VtZW50cywgdGhlcmVi
eSBhbGxvd2luZyB1cyB0byB0cml2aWFsbHkgZWxpbWluYXRlIHN1Y2ggY2hlY2tzIGlmCisgICAg
ICAgIC8vIHRoZSBhcmd1bWVudCBpcyBub3QgdXNlZC4KKyAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgpAQCAtMTM4Nyw3ICsxNDA3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0
IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4g
bV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRp
Y3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAg
ICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAg
ICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbiht
X2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBp
ZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKGJhc2VOb2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CiAKQEAgLTE0MjIsNyArMTQ0Miw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhl
IGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgogICAgICAgICBO
b2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlm
IChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3Jh
cGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKGJhc2VO
b2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihiYXNlTm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKQEAg
LTIxMzMsMTAgKzIxNTMsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Js
b2NrJgogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1l
bnRzW2ldID0gVmFsdWVTb3VyY2UoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNl
KCk7CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0
SGVhZC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1l
bnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAg
ICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3Vy
Y2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV92YXJpYWJs
ZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1
ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgfQor
ICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpOwogICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKTsKIApAQCAtMjIwNyw5ICsyMjQxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsK
ICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBW
YWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2pp
dC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBo
KClbbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXV0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIyMzIsMTIxICsyMjcyLDEyOSBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFs
dWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9w
ZXJhbmQsIGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK1ZhbHVlUmVjb3ZlcnkgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2
YWx1ZVNvdXJjZSkKIHsKLSAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpIHsKLSAgICAgICAg
aWYgKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiBpc0ludDMyUHJlZGljdGlvbihtX2ppdC5ncmFw
aCgpLmdldFByZWRpY3Rpb24ob3BlcmFuZCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgc3dpdGNo
ICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CiAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkp
Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlND
b25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgICAgICAKKyAgICBjYXNlIElu
dDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5
SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgICAgICAKKyAgICBjYXNlIEhhdmVO
b2RlOiB7CisgICAgICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRl
eCgpKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52
YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgICAg
ICBOb2RlKiBub2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCld
OworICAgICAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAg
IC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0
aGlzIG5vZGUsIG9yIG9wZXJhbmQsCisgICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5k
ZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0K
ICAgICAKLSAgICBOb2RlKiBub2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9k
ZUluZGV4KCldOwotICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAg
ICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2Ug
dGhpcyBub2RlLCBvciBvcGVyYW5kLAotICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZp
bmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAg
R2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0
dWFsUmVnaXN0ZXIoKV07Ci0gICAgaWYgKCFpbmZvUHRyLT5hbGl2ZSgpIHx8IGluZm9QdHItPm5v
ZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSB7Ci0gICAgICAgIC8vIFRyeSB0
byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRo
ZSB2YWx1ZSB3ZSB3YW50LgotICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVz
OgotICAgICAgICAvLwotICAgICAgICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZl
IHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVmFsdWVUb051bWJlciBub2RlCi0gICAgICAgIC8v
ICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdv
dWxkIGhhdmUgcGVyZm9ybWVkIGEKLSAgICAgICAgLy8gICAgVmFsdWVUb051bWJlciBjb252ZXJz
aW9uIGFueXdheS4gVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051bWJlci4KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVt
YWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgLy8gICAgVmFsdWVU
b0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVU
b0ludDMyCi0gICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVy
IGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0Ci0gICAgICAgIC8vICAgIG1lYW5zIHRo
YXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hp
bGUKLSAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIEludDMyLgot
ICAgICAgICAvLwotICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2
ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCi0gICAgICAgIC8vICAgIHRo
ZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkg
Zm9ybWVkIG51bWJlcgotICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1l
ZGlhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTog
VGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgLy8g
ICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSBy
ZW1haW5pbmcgdXNlcyBvZgotICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUg
d2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAgIAotICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9O
dW1iZXIpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGls
ZDEoKTsKLSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwot
ICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxS
ZWdpc3RlcigpXTsKLSAgICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHIt
Pm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZVRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dl
bmVyYXRpb25JbmZvLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9O
b2RlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZvLm5vZGVJbmRleCgpXTsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgotICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051
bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAg
ICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGlv
bkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0
ZXIoKV07CisgICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5k
ZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAgICAgLy8gVHJ5IHRv
IHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhl
IHZhbHVlIHdlIHdhbnQuCisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0
aWVzOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRo
ZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUK
KyAgICAgICAgICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMg
b2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9ybWVkIGEKKyAgICAgICAgICAgIC8vICAgIFZh
bHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZh
bHVlVG9OdW1iZXIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMy
OiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFs
dWUgaXMKKyAgICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0
LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAgICAgLy8gICAg
YW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVy
IGJlY2F1c2UgaXQKKyAgICAgICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcg
dXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKKyAgICAgICAgICAgIC8v
ICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9u
IG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCisgICAgICAgICAgICAvLyAgICB0aGVu
IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZv
cm1lZCBudW1iZXIKKyAgICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVy
bWVkaWF0ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0
aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisg
ICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0
aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgICAgICAvLyAgICB0aGUgbnVt
YmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgIAor
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpbmZvUHRy
ID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAg
ICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09
IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBO
b2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJl
Z2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBV
SW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAgICAgaWYg
KHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4
VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRv
SW50MzJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvSW50MzJJbmRleDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9O
dW1iZXJJbmRleDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhU
b1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlckluZGV4OworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBO
b05vZGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBO
b05vZGUpIHsKLSAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUlu
ZGV4VG9Vc2VdOwotICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tu
b2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluZm9Q
dHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgICAgIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRl
eCgpID09IG5vZGVJbmRleFRvVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKQor
ICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgfQogICAgIAotICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKKyAg
ICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOwogCi0gICAgaWYgKGluZm9QdHItPnJlZ2lz
dGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKGluZm9QdHItPnJl
Z2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0gICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQo
KSk7Ci0gICAgfQotICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRO
b25lKQotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIo
KSkpOworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
Tm9uZSkgeworICAgICAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5G
UFIoaW5mb1B0ci0+ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3Rlcigp
KSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFZhbHVlUmVj
b3ZlcnkoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5KCk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAg
ICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk1OTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwyNiArNjYsNTMgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9Owog
CitlbnVtIFZhbHVlU291cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5S
ZWdpc3RlckZpbGUsCisgICAgSW50MzJJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsK
KwogY2xhc3MgVmFsdWVTb3VyY2UgewogcHVibGljOgogICAgIFZhbHVlU291cmNlKCkKLSAgICAg
ICAgOiBtX25vZGVJbmRleChOb05vZGUpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4
RnJvbUtpbmQoU291cmNlTm90U2V0KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCisgICAgICAgIDog
bV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKICAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNlTm90U2V0KTsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSAhPSBIYXZlTm9kZSk7CiAgICAgfQogICAgIAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNl
KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKKyAgICB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgIH0KICAg
ICAKICAgICBib29sIGlzU2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGVJ
bmRleCAhPSBOb05vZGU7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJ
bmRleCkgIT0gU291cmNlTm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQg
a2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9u
b2RlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBIYXZlTm9kZSk7CiAgICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKICAgICB9CiAgICAgCkBA
IC05NCw2ICsxMjEsMjAgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAgIHN0
YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVO
b2RlKTsKKyAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Tm9Ob2RlIC0gbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7CisgICAgfQorICAgIAog
ICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKIH07CiAgICAgCkBAIC01NjksNyArNjEwLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICAvLyBUcmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJl
bnRseSBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQogICAgIC8v
IG9wZXJhbmQtaW5kZXhlZCB2YXJpYWJsZXMuCi0KKyAgICAKICAgICBWYWx1ZVNvdXJjZSB2YWx1
ZVNvdXJjZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOwpAQCAtNjAyLDExICs2NDMsMTEg
QEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICB1aW50MzJfdCBtX2J5
dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCi0gICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcihpbnQgb3BlcmFuZCwgY29uc3QgVmFsdWVTb3VyY2UmKTsKKyAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAg
ICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQsIHZhbHVl
U291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KIH07CiAK
QEAgLTgzMSw3ICs4NzIsNyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklU
KEpJCiAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKICAgICAsIG1fY29tcGlsZU9r
YXkodHJ1ZSkKICAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0
ZXJzKQotICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAg
LCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9w
ZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJ
bmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhY2tlZEludFZlY3Rvcl9oCisjZGVmaW5lIFBhY2tl
ZEludFZlY3Rvcl9oCisKKyNpbmNsdWRlICJCaXRWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKKy8vIFRoaXMgY2xhc3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4gYXJyYXkgb2YgaW50ZWdl
cnMsIHdoZXJlIHRob3NlCisvLyBpbnRlZ2VycyBoYXZlIG9ubHkgYSBoYW5kZnVsIG9mIGJpdHMg
ZWFjaC4gSXQgaXMgbm90IG1lYW50IHRvIGJlCisvLyBlZmZpY2llbnQgaW4gdGltZSwgYnV0IG9u
bHkgaW4gc3BhY2UuIChUaG91Z2ggbWFraW5nIGl0IGVmZmljaWVudAorLy8gaW4gdGltZSBmb3Ig
cG93ZXItb2YtMiB2YWx1ZXMgb2YgYml0Q291bnQgd291bGQgbm90IGJlIGRpZmZpY3VsdC4pCisv
LyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGZvciBzaWduZWQgdHlw
ZXMsIGlmIHlvdQorLy8gYXJlIHJlbHlpbmcgb24gdGhlIHNpZ24gYmVpbmcgcHJlc2VydmVkLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBiaXRDb3VudD4KK2NsYXNzIFBhY2tlZElu
dFZlY3RvciB7CitwdWJsaWM6CisgICAgUGFja2VkSW50VmVjdG9yKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChiaXRDb3VudCk7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCA8IHNpemVvZih2b2lk
KikgKiA4KTsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yKGNvbnN0IFBhY2tlZElu
dFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzKG90aGVyLm1fYml0cykKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFBhY2tlZEludFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFBhY2tlZElu
dFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2JpdHMgPSBvdGhlci5tX2JpdHM7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5zaXplKCkgLyBiaXRDb3VudDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1JbnRzKQorICAgIHsKKyAgICAg
ICAgbV9iaXRzLmVuc3VyZVNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUludHMpCisgICAgeworICAgICAgICBtX2JpdHMucmVz
aXplKG51bUludHMgKiBiaXRDb3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwo
KQorICAgIHsKKyAgICAgICAgbV9iaXRzLmNsZWFyQWxsKCk7CisgICAgfQorICAgIAorICAgIFQg
Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBiaXRD
b3VudDsgKytzdWJJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0IDw8PSAxOworICAgICAgICAg
ICAgcmVzdWx0IHw9IG1fYml0cy5nZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4ocmVzdWx0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAg
Ly8gRG8gYXJpdGhtZXRpYyB1c2luZyB1aW50cHRyX3QsIGJlY2F1c2UgKDEpIHdlIGtub3cgd2hh
dCBpdCBpcworICAgICAgICAvLyAoVCBtaWdodCBiZSBhbiBlbnVtKSBhbmQgKDIpIGl0J3MgdGhl
IGxhcmdlc3QgaW50ZWdlciB0eXBlIHRoYXQKKyAgICAgICAgLy8gaXMgbGlrZWx5IHRvIHBlcmZv
cm0gZGVjZW50bHkgd2VsbC4KKyAgICAgICAgdWludHB0cl90IG15VmFsdWUgPSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByZWxpbWluYXJ5IHNh
bml0eSBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBub3Qgb3V0IG9mIHJhbmdlLgorICAgICAgICBB
U1NFUlQoKG15VmFsdWUgJiBtYXNrKCkpID09IG15VmFsdWUpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IGJpdENvdW50OyBzdWJJbmRleC0tID4gMDspIHsKKyAg
ICAgICAgICAgIG1fYml0cy5zZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4LCAhIShteVZh
bHVlICYgMSkpOworICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIHRoYXQgd2Ugc3RvcmVkIHdoYXQgdGhl
IHVzZXIgdGhvdWdodCB3ZQorICAgICAgICAvLyBzdG9yZWQuCisgICAgICAgIEFTU0VSVChnZXQo
aW5kZXgpID09IHZhbHVlKTsKKyAgICB9Citwcml2YXRlOgorICAgIC8vIFRoaXMgcmV0dXJucyB0
aGUgbWFzaywgYW5kIGlzIGNhcmVmdWwgdG8gbm90IHN0ZXAgb24gdGhlIHdyYXAtYXJvdW5kCisg
ICAgLy8gc2VtYW50aWNzIG9mIHRoZSBzaGlmdCBhbW91bnQgKDEgPDwgMzIgaXMgMSBzaW5jZSAz
MiB3cmFwcyB0byAwKS4gVGhlcmUKKyAgICAvLyBpcyB0aGUgc2VwYXJhdGUgcXVlc3Rpb24gb2Yg
d2h5IHlvdSB3b3VsZCBldmVyIHVzZSB0aGlzIHRvIHN0b3JlIDMyLWJpdAorICAgIC8vIG9yIDY0
LWJpdCB2YWx1ZXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBoYXZlIHRoaXMgd29yayBh
cyBleHBlY3RlZAorICAgIC8vIGluIHN1Y2ggc2l0dWF0aW9ucyByZWdhcmRsZXNzLgorICAgIHN0
YXRpYyB1aW50cHRyX3QgbWFzaygpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIp
IDw8IChiaXRDb3VudCAtIDEpKSAtIDE7IH0KKyAgICAgICAgICAgICAgIAorICAgIC8vIFN0b3Jl
cyBpbnRlZ2VycyBiaXQgYnkgYml0IGluIGJpZyBlbmRpYW4uCisgICAgQml0VmVjdG9yIG1fYml0
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBhY2tlZEludFZlY3Rv
cjsKKworI2VuZGlmIC8vIFBhY2tlZEludFZlY3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvVW5pb25GaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBVbmlvbkZpbmRf
aAorI2RlZmluZSBVbmlvbkZpbmRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIEEgVW5pb25GaW5kIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNv
bXB1dGUgZGlzam9pbnQgc2V0cyB1c2luZyB0aGUKKy8vIGRpc2pvaW50LXNldCBmb3Jlc3QgZGF0
YSBzdHJ1Y3R1cmUuIEVhY2ggVW5pb25GaW5kIGluc3RhbmNlIGlzIGEKKy8vIG5vZGUgaW4gdGhl
IGZvcmVzdC4gVHlwaWNhbGx5IHlvdSB1c2UgaXQgYnkgdXNpbmcgVW5pb25GaW5kIGFzIGEKKy8v
IHN1cGVyY2xhc3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBVbmlvbkZpbmQgewor
cHVibGljOgorICAgIFVuaW9uRmluZCgpCisgICAgICAgIDogbV9wYXJlbnQoMCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFQqIGZpbmQoKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBUKiBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsK
KyAgICAgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7CisgICAg
ICAgICAgICBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlQocmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSB0aGlzKQorICAgICAgICAgICAgbV9w
YXJlbnQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgdW5pZnkoVCogb3RoZXIpCisgICAgeworICAgICAgICBUKiBhID0gc3RhdGljX2Nhc3Q8
VCo+KHRoaXMpLT5maW5kKCk7CisgICAgICAgIFQqIGIgPSBvdGhlci0+ZmluZCgpOworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKCFhLT5tX3BhcmVudCk7CisgICAgICAgIEFTU0VSVCghYi0+bV9w
YXJlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIGEtPm1fcGFyZW50ID0gYjsKKyAgICB9Citwcml2YXRlOgor
ICAgIFQqIG1fcGFyZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
VW5pb25GaW5kOworCisjZW5kaWYgLy8gVW5pb25GaW5kX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108904</attachid>
            <date>2011-09-27 14:53:29 -0700</date>
            <delta_ts>2011-09-27 14:59:47 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>liverangesplit_patch_7.diff</filename>
            <type>text/plain</type>
            <size>84240</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAK
KzIwMTEtMDktMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGlv
blRyYWNrZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYW5kSXNBcmd1bWVu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpn
ZXRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6dmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjps
b2NhbCk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAg
ICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
Ojpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpWYWx1ZVNvdXJjZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3Vy
Y2U6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXhGcm9tS2luZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmtpbmRGcm9tTm9kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
ICogd3RmL1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50
VmVjdG9yOjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAg
ICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBh
Y2tlZEludFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpj
bGVhckFsbCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAg
KFdURjo6UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0
b3I6Om1hc2spOgorICAgICAgICAqIHd0Zi9VbmlvbkZpbmQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlVuaW9uRmluZDo6VW5pb25GaW5kKToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjpmaW5k
KToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjp1bmlmeSk6CisKIDIwMTEtMDktMjcgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmFwaWRseSByZWZy
ZXNoaW5nIGEgZmVNb3JwaG9sb2d5W2Vyb2RlXSB3aXRoIHI9MCBjYW4gc29tZXRpbWVzIGNhdXNl
IGRpc3BsYXkgY29ycnVwdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBA
CiAJCTBCREZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZD
NjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlF
RjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQ
dHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
QkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQg
LyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CisJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBC
aXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBG
MjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJC
MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAv
KiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJ
CTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIy
RTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsgfTsKKwkJMEY2MzZEQTIxNDJEMjdGMDAwQjJF
NjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJs
ZVByZWRpY3Rpb24uaCAqLzsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAw
MDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3Mg
PSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtNjUs
NiArNjcsNyBAQAogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQx
MTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyNzE0MTE1RDRG
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
b3IuaCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDEx
NUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ1MkFBRTE0MzAzNUEwMDAy
NkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZH
Q2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1
NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzkzLDggKzc5NiwxMCBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25G
YXN0TWFsbG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZD
NjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyog
Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZl
Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2Vk
SW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZEludFZl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkRBMTE0MkQyN0VEMDBC
MkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1
Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODEw
LDYgKzgxNSw3IEBACiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIzMTQxMTVE
MUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgx
Q0IgLyogREZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdQcm9wYWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFi
aWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMu
aDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE0LDcgKzE4MjAsOSBAQAogCQk2NTE2MkVGMTA4
RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAq
LywKKwkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCisJCQkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAorCQkJCTBG
MTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5
MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVG
MDBCN0RDMEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFj
ICovLApAQCAtMjM0MSw2ICsyMzQ5LDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8q
IGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywK
IAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJ
CQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJ
MEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4MjQs
NyArMjgzMywxMCBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1h
cGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBB
bGxvY2F0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEwMTQy
RDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzEzOCw2ICszMTUwLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAor
CQkJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzQ5LDcgKzMzNjIsNiBA
QAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjA0RThCMTQyRDY5NkQw
MDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxl
UHJlZGljdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFjdGlvbmFibGVQcmVk
aWN0aW9uX2gKKyNkZWZpbmUgQWN0aW9uYWJsZVByZWRpY3Rpb25faAorCisjaW5jbHVkZSAiSlNB
cnJheS5oIgorI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL1BhY2tlZEludFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gQW4gYWN0aW9uYWJsZSBwcmVkaWN0aW9uIGlzIG9uZSB0aGF0IGlzIGVuZm9yY2VkIG9uIHN0
b3JlcyB0byBsb2NhbCB2YXJpYWJsZXMKKy8vIGFuZCBhcmd1bWVudHMsIGFuZCB3aGVuIHBhc3Np
bmcgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucy4gVGhlc2UgbXVzdCBiZSByZWNvcmRlZAorLy8gaW4g
Q29kZUJsb2NrLgorCitlbnVtIEFjdGlvbmFibGVQcmVkaWN0aW9uIHsKKyAgICBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VJbnQzMlByZWRpY3Rpb24sCisgICAgRW5mb3JjZUFy
cmF5UHJlZGljdGlvbiwKKyAgICBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb24KK307CisKK2lubGlu
ZSBBY3Rpb25hYmxlUHJlZGljdGlvbiBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRU
eXBlKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKK3sKKyAgICBpZiAoaXNJbnQzMlByZWRpY3Rp
b24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOwor
ICAgIAorICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0
dXJuIEVuZm9yY2VBcnJheVByZWRpY3Rpb247CisgICAgCisgICAgaWYgKGlzQm9vbGVhblByZWRp
Y3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlQm9vbGVhblByZWRpY3Rp
b247CisgICAgCisgICAgcmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Cit9CisKK2lubGlu
ZSBib29sIHZhbHVlT2JleXNQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNW
YWx1ZSB2YWx1ZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0
Y2ggKHByZWRpY3Rpb24pIHsKKyAgICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAg
ICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRp
Y3Rpb246CisgICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUpOworCisg
ICAgY2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2YWx1ZS5p
c0Jvb2xlYW4oKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRp
Y3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJp
bmcoQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRp
Y3Rpb24pIHsKKyAgICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVy
biAiRW5mb3JjZUludDMyIjsKKyAgICAgICAgCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VBcnJheSI7CisgICAgICAgIAorICAgIGNhc2Ug
RW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VCb29sZWFu
IjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiAiTm9BY3Rpb25hYmxlUHJl
ZGljdGlvbiI7CisgICAgfQorfQorCit0eXBlZGVmIFBhY2tlZEludFZlY3RvcjxBY3Rpb25hYmxl
UHJlZGljdGlvbiwgMj4gQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3I7CisKK2NsYXNzIEFjdGlv
bmFibGVQcmVkaWN0aW9ucyB7CitwdWJsaWM6CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKCkg
eyB9CisKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnModW5zaWduZWQgbnVtQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1WYXJpYWJsZXMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5lbnN1cmVT
aXplKG51bUFyZ3VtZW50cyk7CisgICAgICAgIG1fdmFyaWFibGVzLmVuc3VyZVNpemUobnVtVmFy
aWFibGVzKTsKKyAgICAgICAgbV9hcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgbV92YXJp
YWJsZXMuY2xlYXJBbGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudCh1bnNp
Z25lZCBhcmd1bWVudCwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAg
ICBtX2FyZ3VtZW50cy5zZXQoYXJndW1lbnQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0
aW9uYWJsZVByZWRpY3Rpb24gYXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAg
ICAgICBpZiAoYXJndW1lbnQgPj0gbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5n
ZXQoYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFZhcmlhYmxlKHVuc2lnbmVk
IHZhcmlhYmxlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
dmFyaWFibGVzLnNldCh2YXJpYWJsZSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25h
YmxlUHJlZGljdGlvbiB2YXJpYWJsZSh1bnNpZ25lZCB2YXJpYWJsZSkKKyAgICB7CisgICAgICAg
IGlmICh2YXJpYWJsZSA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdldCh2
YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50VXBwZXJCb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHZhcmlh
YmxlVXBwZXJCb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAg
IAorICAgIHZvaWQgcGFjaygpCisgICAgeworICAgICAgICBwYWNrVmVjdG9yKG1fYXJndW1lbnRz
KTsKKyAgICAgICAgcGFja1ZlY3RvcihtX3ZhcmlhYmxlcyk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCBwYWNrVmVjdG9yKEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9y
JiB2ZWN0b3IpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsYXN0U2V0SW5kZXggPSAwOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAodmVjdG9yLmdldChpKSAhPSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAg
ICAgICAgICAgICAgIGxhc3RTZXRJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9y
LnJlc2l6ZShsYXN0U2V0SW5kZXggKyAxKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVBy
ZWRpY3Rpb25WZWN0b3IgbV9hcmd1bWVudHM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0
b3IgbV92YXJpYWJsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFj
dGlvbmFibGVQcmVkaWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsOSArMjQwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVy
biBtX2FsdGVybmF0aXZlLmdldCgpOyB9CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBy
ZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQog
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRQcmVkaWN0aW9ucyhQYXNzT3duUHRyPFByZWRpY3Rp
b25UcmFja2VyPiBwcmVkaWN0aW9ucykgeyBtX3ByZWRpY3Rpb25zID0gcHJlZGljdGlvbnM7IH0K
LSAgICAgICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkaWN0aW9ucy5nZXQoKTsgfQotCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
Jik7CiAKQEAgLTk3NSw4ICs5NzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBPd25Q
dHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPFBy
ZWRpY3Rpb25UcmFja2VyPiBtX3ByZWRpY3Rpb25zOwotCiAgICAgICAgIGludDMyX3QgbV9leGVj
dXRlQ291bnRlcjsKICAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
OwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAko
cmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGlj
dGlvblRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAKIAogI2luY2x1
ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLS8vIGhlbHBlciBmdW5jdGlvbiB0
byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7
IH0KLQogc3RydWN0IFByZWRpY3Rpb25TbG90IHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9uU2xv
dCgpCkBAIC01MCw0NiArNDYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBQ
cmVkaWN0aW9uVHJhY2tlcih1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlh
YmxlcykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV92
YXJpYWJsZXMobnVtVmFyaWFibGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0
aWFsaXplU2ltaWxhclRvKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIG1fYXJndW1lbnRzLnJlc2l6ZShvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAg
ICAgICAgbV92YXJpYWJsZXMucmVzaXplKG90aGVyLm51bWJlck9mVmFyaWFibGVzKCkpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvcHlMb2NhbHNGcm9tKGNvbnN0IFByZWRpY3Rpb25UcmFja2Vy
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzID0gb3RoZXIubV9hcmd1bWVudHM7
Ci0gICAgICAgIG1fdmFyaWFibGVzID0gb3RoZXIubV92YXJpYWJsZXM7Ci0gICAgfQotICAgIAot
ICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
LnNpemUoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhG
b3JPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVu
dHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBi
b29sIHByZWRpY3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50
c1thcmd1bWVudF0ubV92YWx1ZSwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
cHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJu
IHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSwgcHJlZGlj
dGlvbik7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kID49IDApOwotICAgICAgICAgICAgbV92
YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBw
cmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2ln
bmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9i
YWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CkBAIC0xMDIsMjAgKzU4LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBwcmVk
aWN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRp
Y3Rpb24odW5zaWduZWQgYXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbYXJndW1lbnRdLm1fdmFsdWU7Ci0gICAgfQotCi0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVk
aWN0aW9uKGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1
bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3Bl
cmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
c1tvcGVyYW5kXS5tX3ZhbHVlOwotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgfQot
ICAgIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2
YXJOdW1iZXIpCiAgICAgewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xv
dD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAg
LTEyNSw4ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxQcmVkaWN0aW9u
U2xvdCwgMTY+IG1fdmFyaWFibGVzOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25T
bG90PiBtX2dsb2JhbFZhcnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODMsNyArODMsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NQaGlTdGFjaygpOwog
ICAgIC8vIEFkZCBzcGlsbCBsb2NhdGlvbnMgdG8gbm9kZXMuCiAgICAgdm9pZCBhbGxvY2F0ZVZp
cnR1YWxSZWdpc3RlcnMoKTsKLQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJh
bmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSkpOworICAgICAgICByZXR1cm4gJm1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOworICAgIH0KKyAgICAKICAgICAvLyBHZXQv
U2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBO
b2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQogICAgIHsKQEAgLTExNiw3ICsxMjQsNyBAQCBwcml2
YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0
aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1
bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1
ZTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTEyOSwxNiArMTM3LDIxIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9y
IGJsb2NrcywKICAgICAgICAgLy8gZXhwYW5kIG1fcHJlc2VydmVkVmFycyB0byBjb3ZlciB0aGVz
ZS4KICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzID0gc3RkOjptYXgobV9wcmVzZXJ2ZWRWYXJzLCBv
cGVyYW5kICsgMSk7Ci0KLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsK
KyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgTm9k
ZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7
CiAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRC
bG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1f
bG9jYWxzW29wZXJhbmRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBub2RlSW5kZXggPSBh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gbm9k
ZUluZGV4OworICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRIZWFk
W29wZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5k
LCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2Nh
bHNbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3BlcmFuZCks
IHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGlu
ZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0x
NDcsMjAgKzE2MCwzNCBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9w
ZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50
cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c1thcmd1bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlOwogCiAgICAg
ICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAg
ICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2Nr
OyBsaW5rCisgICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVu
dC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRh
aWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0
TG9jYWwpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAg
ICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAgICBOb2RlSW5kZXgg
cGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAg
ICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2Nr
LCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJn
dW1lbnRzW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQg
b3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQpAQCAtMTY4LDcgKzE5NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFT
U0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJ
bmZvKG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50
c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdl
dCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBv
biBpdC4KQEAgLTY4OCw2ICs3MTUsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMu
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3Jk
KCk7CiAgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ss
IGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCisgICAgLy8gdXMg
dG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3Vt
ZW50IHBhc3NlZCwgYXMKKyAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4
cGxpY2l0bHkuCisgICAgaWYgKCFtX2N1cnJlbnRJbmRleCkgeworICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50
LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNl
dEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAg
ICAgIH0KKyAgICB9CiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERh
dGEtPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTQyMSwyMCArMTQ2MSwzNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAKICAgICAg
ICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRl
Y2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
ZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVj
ZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAot
ICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQ
aGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c1t2YXJOb10gOiBwcmVkZWNl
c3NvckJsb2NrLT5tX2xvY2Fsc1t2YXJOb107CisgICAgICAgICAgICBWYXJpYWJsZVJlY29yZCYg
dmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2st
Pm1fYXJndW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRU
YWlsW3Zhck5vXTsKIAogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9
IHZhci52YWx1ZTsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2Rl
KSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGkp
OwotICAgICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAg
ICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5v
IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSA6IHZhck5vKSkpOworICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUo
dmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFy
Z3VtZW50UGhpU3RhY2spCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1f
YXJndW1lbnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxv
Y2stPm1fbG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29y
KTsKICAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNl
c3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExv
Y2FsKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFy
aWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCisgICAgICAgICAgICAg
ICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5n
IHdlIG9ubHkgbmVlZCB0aGUgdHdvCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4g
QnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2Nh
bHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVB
Y2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFTU0VSVCht
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFw
aFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNz
b3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBB
U1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8
fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBkYXRhRm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNl
c3Nvci0+dW5pZnkoZGF0YUZvclBoaSk7CiAKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAm
bV9ncmFwaFtlbnRyeS5tX3BoaV07CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQo
KSkKQEAgLTE0NTIsOCArMTUwOCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjaygpCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQzID0g
dmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQ
aGksIE9wSW5mbyhkYXRhRm9yUGhpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBoaU5v
ZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07IC8vIHJlbG9hZCBhZnRlciB2ZWN0b3IgcmVzaXpl
CiAgICAgICAgICAgICBOb2RlJiBuZXdQaGlOb2RlID0gbV9ncmFwaFtuZXdQaGldOwpAQCAtMTUy
MSw2ICsxNTc3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHByb2Nlc3NQ
aGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwogICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2
ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOworICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251
bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3Rz
OwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBlbnVtIENvbXBp
bGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21wCiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJn
c0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEdyYXBoIGRmZyhjb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIEdyYXBoIGRm
ZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIApAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGls
ZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERh
dGEsIGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUg
bWFkZSwgc28gdGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAg
IC8vIGFyZSBzYXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2lu
ZyBPU1IgZW50cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUg
T1NSaW5nIG1heSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlv
blRyYWNrZXI+IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkp
OwotICAgICpwcmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwot
ICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJs
b2NrKTsKICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAg
IEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM5IEBAIGNv
bnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiAgICAgcmV0dXJuIGRmZ09wTmFt
ZXNbb3AgJiBOb2RlSWRNYXNrXTsKIH0KIAorY29uc3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlh
YmxlQWNjZXNzRGF0YShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKK3sK
KyAgICAvLyBWYXJpYWJsZXMgYXJlIGFscmVhZHkgbnVtYmVyZWQuIEZvciByZWFkYWJpbGl0eSBv
ZiBJUiBkdW1wcywgdGhpcyByZXR1cm5zCisgICAgLy8gYW4gYWxwaGFiZXRpYyBuYW1lIGZvciB0
aGUgdmFyaWFibGUgYWNjZXNzIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KKyAgICAv
LyByZWFzb24gYWJvdXQgdHdvIG51bWJlcnMgKHZhcmlhYmxlIG51bWJlciBhbmQgbGl2ZSByYW5n
ZSBudW1iZXIpLCBidXQgaW5zdGVhZAorICAgIC8vIGEgbnVtYmVyIGFuZCBhIGxldHRlci4KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUFjY2Vzc0RhdGEu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCZtX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXSA9PSB2
YXJpYWJsZUFjY2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChpbmRleCAhPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIGlmICghaW5kZXgp
CisgICAgICAgIHJldHVybiAiQSI7CisKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIEJv
dW5kc0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihidWYsIHNpemVvZihidWYpKTsKKyAgICAKKyAg
ICB3aGlsZSAoaW5kZXgpIHsKKyAgICAgICAgKnB0cisrID0gJ0EnICsgKGluZGV4ICUgMjYpOwor
ICAgICAgICBpbmRleCAvPSAyNjsKKyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAK
KyAgICByZXR1cm4gYnVmOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5k
ZXgsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwpAQCAtMTE2LDEyICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9k
ZUluZGV4LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwogICAgIH0KLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgIGludCBsb2Nh
bCA9IG5vZGUubG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSkK
LSAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxv
Y2FsIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKG5vZGUuaGFzVmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBv
cGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcyki
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0
ZXIoKSwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIiVzciV1IiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgbG9jYWwpOworICAgICAgICAgICAgcHJpbnRmKCIlc3IldSglcykiLCBoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBvcGVyYW5kLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVB
Y2Nlc3NEYXRhKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAo
b3AgPT0gSlNDb25zdGFudCkgewpAQCAtMTQ1LDggKzE4MCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAo
Tm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICBwcmludGYoIikiKTsKIAogICAgIGlmICghc2tp
cHBlZCkgewotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQotICAgICAgICAgICAgcHJpbnRm
KCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0UHJlZGljdGlvbihub2Rl
LmxvY2FsKCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQor
ICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmco
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIGVsc2Ug
aWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGlu
ZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFy
TnVtYmVyKCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzUHJlZGljdGlvbigpKQpAQCAt
MjA0LDEwICsyMzksMTAgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQog
dm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoZXhlYykgewotICAgICAgICBzaXplX3QgbnVtYmVy
T2ZBcmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
LCBtX3ByZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBzaXplX3QgbnVt
YmVyT2ZBcmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpLCBtX2FyZ3VtZW50cy5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3Qg
YXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKQotICAgICAgICAgICAgbV9w
cmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMt
PmFyZ3VtZW50KGFyZyAtIDEpKSk7CisgICAgICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFy
Z3VtZW50KGFyZyAtIDEpKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2spOwpA
QCAtMjIwLDEwICsyNTUsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhl
Y1N0YQogICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCi0gICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICBhdChtX2FyZ3VtZW50c1thcmdd
KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgcHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVk
aWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkp
OworICAgICAgICBwcmludGYoIkFyZ3VtZW50IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcs
IHByZWRpY3Rpb25Ub1N0cmluZyhhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCisvLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9CisKIHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIAogLy8gRm9yIGV2ZXJ5IGxvY2Fs
IHZhcmlhYmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4K
QEAgLTUzLDYgKzU2LDEyIEBAIHN0cnVjdCBWYXJpYWJsZVJlY29yZCB7CiAgICAgICAgIDogdmFs
dWUoTm9Ob2RlKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRGaXJzdFRpbWUoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA9PSBOb05vZGUp
OworICAgICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggdmFs
dWU7CiB9OwpAQCAtMTEwLDggKzExOSwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAg
ICwgYmVnaW4oYmVnaW4pCiAgICAgICAgICwgZW5kKE5vTm9kZSkKICAgICAgICAgLCBpc09TUlRh
cmdldChmYWxzZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAg
ICwgbV9sb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRIZWFkKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChudW1Mb2NhbHMpCisgICAgICAgICwg
bV9hcmd1bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbG9jYWxzQXRUYWls
KG51bUxvY2FscykKICAgICB7CiAgICAgfQogCkBAIC0xMjYsOCArMTM3LDEyIEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAgUHJlZGVjZXNzb3JMaXN0
IG1fcHJlZGVjZXNzb3JzOwotICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1l
bnRzOwotICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2FsczsKKyAgICAKKyAg
ICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOworICAgIFZlY3Rv
cjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOworICAgIAorICAgIFZlY3RvcjxW
YXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7CisgICAgVmVjdG9yPFZhcmlhYmxl
UmVjb3JkLCAxNj4gbV9sb2NhbHNBdFRhaWw7CiB9OwogCiAvLyAKQEAgLTEzOCwxMSArMTUzLDYg
QEAgc3RydWN0IEJhc2ljQmxvY2sgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBp
biB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3Rv
cjxOb2RlLCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJndW1l
bnRzLCBudW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLQogICAgIC8vIE1hcmsgYSBub2RlIGFz
IGJlaW5nIHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAg
ICB7CkBAIC0xNzEsMTYgKzE4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nr
c1tibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KICAg
ICAKLSAgICBQcmVkaWN0aW9uVHJhY2tlciYgcHJlZGljdGlvbnMoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbnM7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChpbnQg
b3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcHJlZGljdGlvbnMucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAg
CiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJl
ZGljdEdsb2JhbFZhcih2YXJOdW1iZXIsIHByZWRpY3Rpb24pOwpAQCAtMTkwLDExICsxOTAsMTIg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHBy
ZWRpY3Rpb24pOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAg
cmV0dXJuIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAg
ICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9i
YWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbik7Ci0gICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKQEAgLTIxMiwxMSArMjEzLDYgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbihvcGVyYW5kKTsK
LSAgICB9Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVu
c2lnbmVkIHZhck51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLmdl
dEdsb2JhbFZhclByZWRpY3Rpb24odmFyTnVtYmVyKTsKQEAgLTI0NCw3ICsyNDAsMTAgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICBj
YXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+
bG9jYWwoKSk7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1l
bnQ6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgogICAgICAgICAgICAgcmV0dXJuIGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFy
TnVtYmVyKCkpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CkBAIC0zMjQsNiArMzIzLDkgQEAgcHVi
bGljOgogCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9k
ZVR5cGUpOworICAgIAorICAgIC8vIFRoaXMgaXMgTyhuKSwgYW5kIHNob3VsZCBvbmx5IGJlIHVz
ZWQgZm9yIHZlcmJvc2UgZHVtcHMuCisgICAgY29uc3QgY2hhciogbmFtZU9mVmFyaWFibGVBY2Nl
c3NEYXRhKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKTsKICNlbmRpZgog
CiAgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsK
QEAgLTMzMyw3ICszMzUsMTAgQEAgcHVibGljOgogICAgIFZlY3RvcjxNZXRob2RDaGVja0RhdGE+
IG1fbWV0aG9kQ2hlY2tEYXRhOwogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9y
YWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUds
b2JhbERhdGE7CisgICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CisgICAgU2Vn
bWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRh
OwogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICB1bnNpZ25lZCBtX2xvY2FsVmFy
czsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0ZToKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk2
MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTMsNDAgKzM5MywyMyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERGR19P
U1JfRU5UUlkpCiAgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2soKS0+YXBw
ZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlmZmVyZW5jZUJl
dHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOwogICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlTG9jYWwg
PSAwOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxv
Y2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChiYXNpY0Jsb2Nr
Lm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2
ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIGFjdGlvbmFibGVQ
cmVkaWN0aW9ucyhiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSwgYmFzaWNCbG9j
ay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZFtp
XS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRBcmd1bWVudChpLCBhY3Rpb25hYmxlUHJl
ZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUp
Ci0gICAgICAgICAgICAgICAgbGFzdExpdmVMb2NhbCA9IGk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVh
ZFtpXS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAg
ICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRWYXJpYWJsZShpLCBhY3Rpb25hYmxl
UHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1l
bnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9s
aXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAg
ICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNldChpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRz
LmNsZWFyQWxsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGFzdExpdmVMb2NhbCkgewotICAg
ICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFzdExpdmVMb2NhbCArIDEp
OwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlTG9j
YWw7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZh
bHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxl
cy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50
cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgICAgICBhY3Rpb25hYmxlUHJlZGlj
dGlvbnMucGFjaygpOworICAgICAgICAKKyAgICAgICAgZW50cnktPm1fcHJlZGljdGlvbnMgPSBh
Y3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmFzaWNC
bG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tl
ZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVW5p
b25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1
Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCiAjZGVmaW5lIEVO
QUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC0xMDgsNiArMTA5LDUxIEBAIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAorY2xhc3MgVmFyaWFibGVBY2Nlc3NE
YXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4geworcHVibGljOgorICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQorICAgICAgICAs
IG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCisgICAgICAgIDogbV9sb2NhbChs
b2NhbCkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWw7Cisg
ICAgfQorICAgIAorICAgIGludCBvcGVyYW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3QoUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGlj
dGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gZmluZCgp
LT5tX3ByZWRpY3Rpb247CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNs
aWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdp
dGgKKyAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhl
IHNhbWUgcHJlZGljdGlvbi4gQnV0CisgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmll
cyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBm
b3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgorCisgICAgVmlydHVh
bFJlZ2lzdGVyIG1fbG9jYWw7CisgICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Cit9Owor
CiB0eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZsYWdzOwogI2RlZmluZSBOb2RlVXNlQm90dG9t
ICAgICAgMHgwMAogI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQpAQCAtMjIzLDYgKzI2
OSw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MKICAgICBtYWNy
byhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhpLCAwKSBcCiAgICAg
XAorICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4gKi9cCisgICAgbWFjcm8o
U2V0QXJndW1lbnQsIDApIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0
aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNy
byhCaXRPciwgTm9kZVJlc3VsdEludDMyKSBcCkBAIC00NTcsMTUgKzUwNiwzMiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnRO
b2RlKGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzVmFy
aWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6
CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCA9
PSBHZXRMb2NhbCB8fCBvcCA9PSBTZXRMb2NhbDsKKyAgICAgICAgcmV0dXJuIGhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgIH0KLQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOworICAgIH0KKyAgICAKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0xvY2Fs
KCkpOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3RlciltX29wSW5mbzsKKyAgICAgICAg
cmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0KIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyArMzUsNiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWlubGluZSBib29sIHByZWRpY3Rpb25Jc1ZhbGlkKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgUHJlZGljdGVkVHlwZSB0eXBl
KQotewotICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IG9ubHkgbG9jYWwgdmFyaWFibGUg
cHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQKLSAgICAvLyBvbiBTZXRMb2NhbC4KLSAgICAK
LSAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5p
c0ludDMyKCk7Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHR5cGUpKQotICAgICAg
ICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICAKLSAgICBpZiAoaXNC
b29sZWFuUHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKQEAgLTY2LDcgKzQ5LDYgQEAgdm9pZCog
cHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogI2VuZGlmCiAgICAgCiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIE9T
UkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKGVudHJ5LT5tX2J5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CkBAIC05NSwyNiArNzcsMzQgQEAgdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAgIGludG8gYSBsZXNzLWxpa2Vs
eSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIHNpbXBseSBub3QK
ICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAgIFByZWRpY3Rpb25UcmFja2Vy
KiBwcmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5wcmVkaWN0aW9ucygpOwotICAgIAot
ICAgIGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKSA+IGV4ZWMtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5zaXplKCkgJiYgZW50
cnktPm1fbGl2ZUFyZ3VtZW50cy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNW
YWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRB
cmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGVu
dHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAg
QWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFy
Z3VtZW50KGkpOworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0
aW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGkgPj0gZXhlYy0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUg
d2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25U
b1N0cmluZyhwcmVkaWN0aW9uKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2Jh
bERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbikpIHsKICNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3VtZW50
KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdl
dEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25z
LT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBlbnRyeS0+bV9s
aXZlVmFyaWFibGVzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmdldChpKQotICAg
ICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVy
cygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlVXBw
ZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlv
biA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOworICAgICAgICBpZiAocHJlZGlj
dGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4
ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKICNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVy
cygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGlj
dGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRp
Y3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CkBAIC0xMjksNyArMTE5LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4
ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+bV9udW1D
YWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
IHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLi5cbiIp
OworICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZh
aWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlf
aAogCi0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgIkFjdGlvbmFibGVQcmVk
aWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw4ICszOSw3IEBAIG5hbWVzcGFj
ZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZUlu
ZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgQml0VmVjdG9yIG1f
bGl2ZUFyZ3VtZW50czsKLSAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOworICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlz
aW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDE0ICszMTksMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24p
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0KG5v
ZGUubG9jYWwoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QobV9wcmVkaWN0aW9u
c1tub2RlLmNoaWxkMSgpXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC01NTgsMTUgKzU1OCwxNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRocm93
OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIGNhc2UgRm9yY2VP
U1JFeGl0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gVGhp
cyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgotICAgICAgICBj
YXNlIFBoYW50b206CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgUHV0
QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBQdXRCeUlk
OgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3Qg
ZG8gYW55dGhpbmcuCisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGJyZWFrOwog
I2Vsc2UKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsMjAgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SQogI2lmbmRlZiBOREVCVUcKIHZvaWQgVmFsdWVTb3VyY2U6
OmR1bXAoRklMRSogb3V0KSBjb25zdAogewotICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBt
X25vZGVJbmRleCk7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJjZU5vdFNl
dDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmls
ZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6CisgICAg
ICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBIYXZl
Tm9kZToKKyAgICAgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSog
b3V0KSBjb25zdApAQCAtMjAzLDkgKzIxNiw5IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgY2gKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAg
ICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9w
ZXJhbmRGb3JBcmd1bWVudChhcmd1bWVudCksIGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsK
KyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAg
ICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KHZhcmlhYmxlLCBqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7CisgICAgICAgIG1fdmFyaWFi
bGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3Zhcmlh
Ymxlc1t2YXJpYWJsZV0pOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjk1LDcgKzcwOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
biA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlz
IGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKQEAgLTc3MCw3ICs3ODMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNv
ZGVJbmRleEZvck9TUiAmJiAhbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsK
ICAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCk7CiAgICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAg
UHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklU
Q29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CkBAIC03OTMsOSArODA2LDE2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAg
ICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZl
IHRoZSB2YWx1ZSBvZgogICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVn
aXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAg
dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZSgpOworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8v
IFRoaXMgaXMgYSBuby1vcDsgaXQganVzdCBtYXJrcyB0aGUgZmFjdCB0aGF0IHRoZSBhcmd1bWVu
dCBpcyBiZWluZyB1c2VkLgorICAgICAgICAvLyBCdXQgaXQgbWF5IGJlIHByb2ZpdGFibGUgdG8g
dXNlIHRoaXMgYXMgYSBob29rIHRvIHJ1biBzcGVjdWxhdGlvbiBjaGVja3MKKyAgICAgICAgLy8g
b24gYXJndW1lbnRzLCB0aGVyZWJ5IGFsbG93aW5nIHVzIHRvIHRyaXZpYWxseSBlbGltaW5hdGUg
c3VjaCBjaGVja3MgaWYKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIG5vdCB1c2VkLgorICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CkBAIC0xMzg3
LDggKzE0MDcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5
IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBj
YW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgo
KVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8
ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUu
bG9jYWwoKSkpKQorICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJy
YXlQcmVkaWN0aW9uKGJhc2VOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KSB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDaGVja0FycmF5KEAldSkgICAiLCBub2RlLmNoaWxkMSgpKTsKKyNlbmRpZgogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAg
ICAgICAgfQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAv
LyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vz
c2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQpAQCAtMTQyMiw4ICsx
NDQ2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBj
b250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNr
aXAgdGhlIGNoZWNrLgogICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNB
cnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2Fs
KCkpKSkKKyAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJl
ZGljdGlvbihiYXNlTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSkgewor
I2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2hlY2tBcnJheUAldSAgICIsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlmCiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICB9
CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHkudXNlKCk7CkBAIC0yMTMz
LDEwICsyMTYxLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IFZhbHVlU291cmNlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOwor
ICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0
SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAg
ICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpm
b3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+cHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNp
emUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBpZiAobm9k
ZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFy
aWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2Rl
SW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAK
ICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
ICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCk7CiAKQEAgLTIyMDcsOSArMjI0OSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
aGVja0FyZ3VtZW50VHlwZXMoCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAg
bV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVT
b3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29k
ZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpW21f
aml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0yMjMyLDEyMSArMjI4MCwxMjkgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlUmVj
b3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5k
LCBjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0
aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVT
b3VyY2UpCiB7Ci0gICAgaWYgKCF2YWx1ZVNvdXJjZS5pc1NldCgpKSB7Ci0gICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgaXNJbnQzMlByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5n
ZXRQcmVkaWN0aW9uKG9wZXJhbmQpKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgIHN3aXRjaCAodmFs
dWVTb3VyY2Uua2luZCgpKSB7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgogICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQotICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3Rh
bnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAgICAgCisgICAgY2FzZSBJbnQzMklu
UmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVn
aXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAgICAgICAgCisgICAgY2FzZSBIYXZlTm9kZTog
eworICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkp
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVP
ZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAKKyAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAg
ICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAvLyBJ
dCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBu
b2RlLCBvciBvcGVyYW5kLAorICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5l
ZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgorICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAg
Ci0gICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRl
eCgpXTsKLSAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgLy8g
SXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMg
bm9kZSwgb3Igb3BlcmFuZCwKLSAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0
byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgotICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotICAgIAotICAgIEdlbmVy
YXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJl
Z2lzdGVyKCldOwotICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5k
ZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAvLyBUcnkgdG8gc2Vl
IGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFs
dWUgd2Ugd2FudC4KLSAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJz
aW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQotICAgICAgICAvLyAgICB0
aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBo
YXZlIHBlcmZvcm1lZCBhCi0gICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBh
bnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmlu
ZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCi0gICAgICAgIC8vICAgIFZhbHVlVG9JbnQz
MiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQz
MgotICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3
aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAotICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNv
bWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCi0g
ICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lv
biBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgotICAgICAgICAvLyAgICB0aGVuIHRo
ZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1l
ZCBudW1iZXIKLSAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRl
LgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMg
bm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCi0gICAgICAgIC8vICAgIGFs
dGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWlu
aW5nIHVzZXMgb2YKLSAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGgg
YSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVy
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7
Ci0gICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAg
ICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0
ZXIoKV07Ci0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2Rl
SW5kZXgoKSA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgTm9kZUluZGV4
IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQz
MlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0
aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKLSAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlVG9Eb3VibGU6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAgICAgICAgICAgICB2YWx1
ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICAg
ICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIEdlbmVyYXRpb25JbmZv
KiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCld
OworICAgICAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkg
IT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUg
aWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1
ZSB3ZSB3YW50LgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25s
eSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVmFsdWVUb051bWJlciBub2RlCisgICAg
ICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRo
ZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRv
TnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRv
TnVtYmVyLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlr
ZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlz
CisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0
IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKKyAgICAgICAgICAgIC8vICAgIGFuZCBh
IFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNh
dXNlIGl0CisgICAgICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMg
d291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgICAgICAvLyAgICBv
dGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0
aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUg
b25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQg
bnVtYmVyCisgICAgICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlh
dGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFi
b3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAg
ICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgorICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3
b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZt
X2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2Rl
SW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3Rl
ciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2lu
Zm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNo
ZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVt
YmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKLSAgICAgICAgICAgIGlmICh2YWx1
ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNl
ID0gdmFsdWVUb051bWJlckluZGV4OwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMy
SW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVU
b0ludDMySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9
IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVy
SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2Ug
PSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9OdW1iZXJJbmRleDsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2Rl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2Rl
KSB7Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRv
VXNlXTsKLSAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0
ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5h
bGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRv
VXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0Lmdy
YXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1f
Z2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9
PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3Rh
bnQoanNVbmRlZmluZWQoKSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIH0KICAgICAKLSAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CisgICAgICAg
IEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKIAotICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOwot
ICAgIH0KLSAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkK
LSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsK
KyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUp
IHsKKyAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXREb3VibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGlu
Zm9QdHItPmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihp
bmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwog
ICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
KCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeSgpOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgfQog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsMjYgKzY2LDUzIEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fc3JjOwogfTsKIAorZW51
bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0
ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZpbGUsCisgICAgSGF2ZU5vZGUKK307CisKIGNs
YXNzIFZhbHVlU291cmNlIHsKIHB1YmxpYzoKICAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDog
bV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21L
aW5kKFNvdXJjZU5vdFNldCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1
ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9k
ZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZhbHVlU291cmNlS2luZCkpCiAgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5vdFNldCk7CisgICAgICAgIEFTU0VSVChraW5kKCkg
IT0gSGF2ZU5vZGUpOwogICAgIH0KICAgICAKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2Rl
SW5kZXggbm9kZUluZGV4KQogICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKICAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVmFsdWVTb3VyY2UgZm9yUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgeworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAg
IHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBpc1NldCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXgg
IT0gTm9Ob2RlOworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgp
ICE9IFNvdXJjZU5vdFNldDsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUlu
ZGV4KTsKICAgICB9CiAgICAgCiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0CiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2
ZU5vZGUpOwogICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CiAgICAgfQogICAgIApAQCAtOTQs
NiArMTIxLDIwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMg
Tm9kZUluZGV4IG5vZGVJbmRleEZyb21LaW5kKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPj0gU291cmNlTm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7
CisgICAgICAgIHJldHVybiBOb05vZGUgLSBraW5kOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VmFsdWVTb3VyY2VLaW5kIGtpbmRGcm9tTm9kZUluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBraW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9k
ZSAtIG5vZGVJbmRleCk7CisgICAgICAgIGlmIChraW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+KGtpbmQpOworICAgIH0KKyAgICAKICAgICBO
b2RlSW5kZXggbV9ub2RlSW5kZXg7CiB9OwogICAgIApAQCAtNTY5LDcgKzYxMCw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkg
aG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKICAgICAvLyBvcGVy
YW5kLWluZGV4ZWQgdmFyaWFibGVzLgotCisgICAgCiAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKTsKQEAgLTYwMiwxMSArNjQzLDExIEBAIHBy
aXZhdGU6CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSOwogICAgIAotICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoaW50IG9wZXJhbmQsIGNvbnN0IFZhbHVlU291cmNlJik7CisgICAgVmFsdWVSZWNvdmVy
eSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kLCB2YWx1ZVNvdXJj
ZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiB9OwogCkBAIC04
MzEsNyArODcyLDcgQEAgaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQog
ICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRydWUpCiAgICAgLCBtX2NvbXBpbGVPa2F5KHRy
dWUpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykK
LSAgICAsIG1fdmFyaWFibGVzKGppdC5jb2RlQmxvY2soKS0+bV9udW1WYXJzKQorICAgICwgbV92
YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5k
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhG
b3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQYWNrZWRJbnRWZWN0b3JfaAorI2RlZmluZSBQYWNrZWRJbnRW
ZWN0b3JfaAorCisjaW5jbHVkZSAiQml0VmVjdG9yLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuIGFycmF5IG9mIGludGVnZXJzLCB3
aGVyZSB0aG9zZQorLy8gaW50ZWdlcnMgaGF2ZSBvbmx5IGEgaGFuZGZ1bCBvZiBiaXRzIGVhY2gu
IEl0IGlzIG5vdCBtZWFudCB0byBiZQorLy8gZWZmaWNpZW50IGluIHRpbWUsIGJ1dCBvbmx5IGlu
IHNwYWNlLiAoVGhvdWdoIG1ha2luZyBpdCBlZmZpY2llbnQKKy8vIGluIHRpbWUgZm9yIHBvd2Vy
LW9mLTIgdmFsdWVzIG9mIGJpdENvdW50IHdvdWxkIG5vdCBiZSBkaWZmaWN1bHQuKQorLy8gTm90
ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBmb3Igc2lnbmVkIHR5cGVzLCBp
ZiB5b3UKKy8vIGFyZSByZWx5aW5nIG9uIHRoZSBzaWduIGJlaW5nIHByZXNlcnZlZC4KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgYml0Q291bnQ+CitjbGFzcyBQYWNrZWRJbnRWZWN0
b3IgeworcHVibGljOgorICAgIFBhY2tlZEludFZlY3RvcigpCisgICAgeworICAgICAgICBBU1NF
UlQoYml0Q291bnQpOworICAgICAgICBBU1NFUlQoYml0Q291bnQgPCBzaXplb2Yodm9pZCopICog
OCk7CisgICAgfQorICAgIAorICAgIFBhY2tlZEludFZlY3Rvcihjb25zdCBQYWNrZWRJbnRWZWN0
b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0cyhvdGhlci5tX2JpdHMpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBQYWNrZWRJbnRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBQYWNrZWRJbnRWZWN0
b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9iaXRzID0gb3RoZXIubV9iaXRzOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2JpdHMuc2l6ZSgpIC8gYml0Q291bnQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgZW5zdXJlU2l6ZShzaXplX3QgbnVtSW50cykKKyAgICB7CisgICAgICAgIG1f
Yml0cy5lbnN1cmVTaXplKG51bUludHMgKiBiaXRDb3VudCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgcmVzaXplKHNpemVfdCBudW1JbnRzKQorICAgIHsKKyAgICAgICAgbV9iaXRzLnJlc2l6ZShu
dW1JbnRzICogYml0Q291bnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQWxsKCkKKyAg
ICB7CisgICAgICAgIG1fYml0cy5jbGVhckFsbCgpOworICAgIH0KKyAgICAKKyAgICBUIGdldChz
aXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IDA7IHN1YkluZGV4IDwgYml0Q291bnQ7
ICsrc3ViSW5kZXgpIHsKKyAgICAgICAgICAgIHJlc3VsdCA8PD0gMTsKKyAgICAgICAgICAgIHJl
c3VsdCB8PSBtX2JpdHMuZ2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHJlc3VsdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KHNpemVfdCBpbmRleCwgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIERv
IGFyaXRobWV0aWMgdXNpbmcgdWludHB0cl90LCBiZWNhdXNlICgxKSB3ZSBrbm93IHdoYXQgaXQg
aXMKKyAgICAgICAgLy8gKFQgbWlnaHQgYmUgYW4gZW51bSkgYW5kICgyKSBpdCdzIHRoZSBsYXJn
ZXN0IGludGVnZXIgdHlwZSB0aGF0CisgICAgICAgIC8vIGlzIGxpa2VseSB0byBwZXJmb3JtIGRl
Y2VudGx5IHdlbGwuCisgICAgICAgIHVpbnRwdHJfdCBteVZhbHVlID0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pih2YWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBQcmVsaW1pbmFyeSBzYW5pdHkg
Y2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgbm90IG91dCBvZiByYW5nZS4KKyAgICAgICAgQVNTRVJU
KChteVZhbHVlICYgbWFzaygpKSA9PSBteVZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3VudDsgc3ViSW5kZXgtLSA+IDA7KSB7CisgICAgICAg
ICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCwgISEobXlWYWx1ZSAm
IDEpKTsKKyAgICAgICAgICAgIG15VmFsdWUgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayB0aGF0IHdlIHN0b3JlZCB3aGF0IHRoZSB1c2Vy
IHRob3VnaHQgd2UKKyAgICAgICAgLy8gc3RvcmVkLgorICAgICAgICBBU1NFUlQoZ2V0KGluZGV4
KSA9PSB2YWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICAvLyBUaGlzIHJldHVybnMgdGhlIG1h
c2ssIGFuZCBpcyBjYXJlZnVsIHRvIG5vdCBzdGVwIG9uIHRoZSB3cmFwLWFyb3VuZAorICAgIC8v
IHNlbWFudGljcyBvZiB0aGUgc2hpZnQgYW1vdW50ICgxIDw8IDMyIGlzIDEgc2luY2UgMzIgd3Jh
cHMgdG8gMCkuIFRoZXJlCisgICAgLy8gaXMgdGhlIHNlcGFyYXRlIHF1ZXN0aW9uIG9mIHdoeSB5
b3Ugd291bGQgZXZlciB1c2UgdGhpcyB0byBzdG9yZSAzMi1iaXQKKyAgICAvLyBvciA2NC1iaXQg
dmFsdWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gaGF2ZSB0aGlzIHdvcmsgYXMgZXhw
ZWN0ZWQKKyAgICAvLyBpbiBzdWNoIHNpdHVhdGlvbnMgcmVnYXJkbGVzcy4KKyAgICBzdGF0aWMg
dWludHB0cl90IG1hc2soKSB7IHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCAo
Yml0Q291bnQgLSAxKSkgLSAxOyB9CisgICAgICAgICAgICAgICAKKyAgICAvLyBTdG9yZXMgaW50
ZWdlcnMgYml0IGJ5IGJpdCBpbiBiaWcgZW5kaWFuLgorICAgIEJpdFZlY3RvciBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYWNrZWRJbnRWZWN0b3I7CisK
KyNlbmRpZiAvLyBQYWNrZWRJbnRWZWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1VuaW9uRmluZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFVuaW9uRmluZF9oCisj
ZGVmaW5lIFVuaW9uRmluZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gQSBVbmlvbkZpbmQgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY29tcHV0
ZSBkaXNqb2ludCBzZXRzIHVzaW5nIHRoZQorLy8gZGlzam9pbnQtc2V0IGZvcmVzdCBkYXRhIHN0
cnVjdHVyZS4gRWFjaCBVbmlvbkZpbmQgaW5zdGFuY2UgaXMgYQorLy8gbm9kZSBpbiB0aGUgZm9y
ZXN0LiBUeXBpY2FsbHkgeW91IHVzZSBpdCBieSB1c2luZyBVbmlvbkZpbmQgYXMgYQorLy8gc3Vw
ZXJjbGFzczoKKy8vCisvLyBjbGFzcyBNZW1iZXJPZlNldDogcHVibGljIFVuaW9uRmluZDxNZW1i
ZXJPZlNldD4geyAuLi4gfQorLy8KKy8vIENhbGxpbmcgeC0+ZmluZCgpIGdpdmVzIHlvdSBhIE1l
bWJlck9mU2V0KiB0aGF0IHJlcHJlc2VudHMgdGhlCisvLyBkaXNqb2ludCBzZXQgdGhhdCB4IGJl
bG9uZ3MgdG8uIENhbGxpbmcgeC0+dW5pZnkoeSkgdW5pZmllcyB4J3MKKy8vIHNldCB3aXRoIHkn
cyBzZXQsIGFuZCBlbnN1cmVzIHRoYXQ6CisvLworLy8geC0+ZmluZCgpID09IHktPmZpbmQoKQor
Ly8KKy8vIGFuZCB0aGF0OgorLy8KKy8vIGEtPmZpbmQoKSA9PSBiLT5maW5kKCkKKy8vCisvLyBm
b3IgYW55IGEsIGIgaWYgcHJpb3IgdG8gdGhlIGNhbGwgdG8geC0+dW5pZnkoeSksIHdlIHdvdWxk
IGhhdmUKKy8vIGhhZDoKKy8vCisvLyBhLT5maW5kKCkgPT0geAorLy8gYi0+ZmluZCgpID09IHkK
Ky8vCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGFsbW9zdCBhbW9ydGl6ZWQgTygxKSwgYnV0
IGNvdWxkIGJlIHdvcnNlCisvLyBpbiB1bmxpa2VseSBwYXRob2xvZ2ljYWwgY2FzZXMuIEl0IGZh
dm9ycyBoYXZpbmcgYSBub24tcmVjdXJzaXZlCisvLyBzaW5nbGUgcGFzcyBpbXBsZW1lbnRhdGlv
biBvZiB1bmlmeSgpIGFuZCBmaW5kKCkgb3ZlciBlbnN1cmluZyB0aGUKKy8vIHRoZW9yZXRpY2Fs
IE8oSW52ZXJzZUFja2VybWFubltuXSkgYW1vcnRpemVkIGJvdW5kLCB3aGljaCBpcyBtdWNoCisv
LyBjbG9zZXIgdG8gYW1vcnRpemVkIE8oMSkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBVbmlvbkZpbmQgeworcHVibGljOgorICAgIFVuaW9uRmluZCgpCisgICAgICAgIDogbV9wYXJl
bnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFQqIGZpbmQoKQorICAgIHsKKyAgICAgICAg
VCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBUKiBuZXh0ID0gcmVz
dWx0LT5tX3BhcmVudDsKKyAgICAgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSB0aGlzKQor
ICAgICAgICAgICAgbV9wYXJlbnQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdW5pZnkoVCogb3RoZXIpCisgICAgeworICAgICAgICBUKiBh
ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5maW5kKCk7CisgICAgICAgIFQqIGIgPSBvdGhlci0+
ZmluZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFhLT5tX3BhcmVudCk7CisgICAgICAg
IEFTU0VSVCghYi0+bV9wYXJlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGEgPT0gYikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGEtPm1fcGFyZW50ID0gYjsKKyAg
ICB9Citwcml2YXRlOgorICAgIFQqIG1fcGFyZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VW5pb25GaW5kOworCisjZW5kaWYgLy8gVW5pb25GaW5kX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108907</attachid>
            <date>2011-09-27 14:59:47 -0700</date>
            <delta_ts>2011-09-27 15:06:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>liverangesplit_patch_8.diff</filename>
            <type>text/plain</type>
            <size>84096</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAK
KzIwMTEtMDktMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmZlciB3aGljaCB1c2VzIG9mIGEgdmFyaWFibGUgYXJlIG5vdCBhbGlh
c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV09SSyBJTiBQUk9HUkVTUy4gIFNvIGZhciBJIGltcGxlbWVudGVkIHRoZSBhYmlsaXR5IGZv
ciBPU1IgdG8KKyAgICAgICAgcmVjb2duaXplIHRoYXQgZGlmZmVyZW50IHByZWRpY3Rpb25zIGV4
aXN0IGF0IGRpZmZlcmVudCBPU1IKKyAgICAgICAgZW50cnlwb2ludHMuIEl0IGRvZXNuJ3QgcXVp
dGUgd29yayB5ZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjphY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBl
KToKKyAgICAgICAgKEpTQzo6dmFsdWVPYmV5c1ByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjph
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjpBY3Rpb25hYmxlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpBY3Rpb25h
YmxlUHJlZGljdGlvbnM6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVBy
ZWRpY3Rpb25zOjphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9u
czo6c2V0VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjphcmd1bWVudFVw
cGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnZhcmlhYmxl
VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFjayk6
CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6cGFja1ZlY3Rvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGlv
blRyYWNrZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYW5kSXNBcmd1bWVu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpn
ZXRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6dmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjps
b2NhbCk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAg
ICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
Ojpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpWYWx1ZVNvdXJjZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3Vy
Y2U6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpub2RlSW5kZXhGcm9tS2luZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmtpbmRGcm9tTm9kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
ICogd3RmL1BhY2tlZEludFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFja2VkSW50
VmVjdG9yOjpQYWNrZWRJbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2l6ZSk6CisgICAg
ICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OlBh
Y2tlZEludFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpj
bGVhckFsbCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6Z2V0KToKKyAgICAgICAg
KFdURjo6UGFja2VkSW50VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0
b3I6Om1hc2spOgorICAgICAgICAqIHd0Zi9VbmlvbkZpbmQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlVuaW9uRmluZDo6VW5pb25GaW5kKToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjpmaW5k
KToKKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjp1bmlmeSk6CisKIDIwMTEtMDktMjcgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmFwaWRseSByZWZy
ZXNoaW5nIGEgZmVNb3JwaG9sb2d5W2Vyb2RlXSB3aXRoIHI9MCBjYW4gc29tZXRpbWVzIGNhdXNl
IGRpc3BsYXkgY29ycnVwdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBA
CiAJCTBCREZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZD
NjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlF
RjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQ
dHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
QkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQg
LyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CisJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBC
aXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBG
MjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJC
MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAv
KiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJ
CTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIy
RTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsgfTsKKwkJMEY2MzZEQTIxNDJEMjdGMDAwQjJF
NjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJs
ZVByZWRpY3Rpb24uaCAqLzsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAw
MDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3Mg
PSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtNjUs
NiArNjcsNyBAQAogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQx
MTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyNzE0MTE1RDRG
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
b3IuaCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDEx
NUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ1MkFBRTE0MzAzNUEwMDAy
NkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZH
Q2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1
NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzkzLDggKzc5NiwxMCBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25G
YXN0TWFsbG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZD
NjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyog
Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZl
Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2Vk
SW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZEludFZl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkRBMTE0MkQyN0VEMDBC
MkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1
Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODEw
LDYgKzgxNSw3IEBACiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIzMTQxMTVE
MUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgx
Q0IgLyogREZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdQcm9wYWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFi
aWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMu
aDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE0LDcgKzE4MjAsOSBAQAogCQk2NTE2MkVGMTA4
RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAq
LywKKwkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCisJCQkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAorCQkJCTBG
MTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5
MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVG
MDBCN0RDMEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFj
ICovLApAQCAtMjM0MSw2ICsyMzQ5LDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8q
IGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywK
IAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJ
CQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJ
MEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4MjQs
NyArMjgzMywxMCBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1h
cGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBB
bGxvY2F0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEwMTQy
RDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzEzOCw2ICszMTUwLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAor
CQkJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzQ5LDcgKzMzNjIsNiBA
QAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjA0RThCMTQyRDY5NkQw
MDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxl
UHJlZGljdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFjdGlvbmFibGVQcmVk
aWN0aW9uX2gKKyNkZWZpbmUgQWN0aW9uYWJsZVByZWRpY3Rpb25faAorCisjaW5jbHVkZSAiSlNB
cnJheS5oIgorI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL1BhY2tlZEludFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gQW4gYWN0aW9uYWJsZSBwcmVkaWN0aW9uIGlzIG9uZSB0aGF0IGlzIGVuZm9yY2VkIG9uIHN0
b3JlcyB0byBsb2NhbCB2YXJpYWJsZXMKKy8vIGFuZCBhcmd1bWVudHMsIGFuZCB3aGVuIHBhc3Np
bmcgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucy4gVGhlc2UgbXVzdCBiZSByZWNvcmRlZAorLy8gaW4g
Q29kZUJsb2NrLgorCitlbnVtIEFjdGlvbmFibGVQcmVkaWN0aW9uIHsKKyAgICBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VJbnQzMlByZWRpY3Rpb24sCisgICAgRW5mb3JjZUFy
cmF5UHJlZGljdGlvbiwKKyAgICBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb24KK307CisKK2lubGlu
ZSBBY3Rpb25hYmxlUHJlZGljdGlvbiBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRU
eXBlKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKK3sKKyAgICBpZiAoaXNJbnQzMlByZWRpY3Rp
b24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOwor
ICAgIAorICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0
dXJuIEVuZm9yY2VBcnJheVByZWRpY3Rpb247CisgICAgCisgICAgaWYgKGlzQm9vbGVhblByZWRp
Y3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlQm9vbGVhblByZWRpY3Rp
b247CisgICAgCisgICAgcmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Cit9CisKK2lubGlu
ZSBib29sIHZhbHVlT2JleXNQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNW
YWx1ZSB2YWx1ZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0
Y2ggKHByZWRpY3Rpb24pIHsKKyAgICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAg
ICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRp
Y3Rpb246CisgICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUpOworCisg
ICAgY2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2YWx1ZS5p
c0Jvb2xlYW4oKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRp
Y3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJp
bmcoQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRp
Y3Rpb24pIHsKKyAgICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVy
biAiRW5mb3JjZUludDMyIjsKKyAgICAgICAgCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VBcnJheSI7CisgICAgICAgIAorICAgIGNhc2Ug
RW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VCb29sZWFu
IjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiAiTm9BY3Rpb25hYmxlUHJl
ZGljdGlvbiI7CisgICAgfQorfQorCit0eXBlZGVmIFBhY2tlZEludFZlY3RvcjxBY3Rpb25hYmxl
UHJlZGljdGlvbiwgMj4gQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3I7CisKK2NsYXNzIEFjdGlv
bmFibGVQcmVkaWN0aW9ucyB7CitwdWJsaWM6CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKCkg
eyB9CisKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnModW5zaWduZWQgbnVtQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1WYXJpYWJsZXMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5lbnN1cmVT
aXplKG51bUFyZ3VtZW50cyk7CisgICAgICAgIG1fdmFyaWFibGVzLmVuc3VyZVNpemUobnVtVmFy
aWFibGVzKTsKKyAgICAgICAgbV9hcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgbV92YXJp
YWJsZXMuY2xlYXJBbGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudCh1bnNp
Z25lZCBhcmd1bWVudCwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAg
ICBtX2FyZ3VtZW50cy5zZXQoYXJndW1lbnQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0
aW9uYWJsZVByZWRpY3Rpb24gYXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAg
ICAgICBpZiAoYXJndW1lbnQgPj0gbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5n
ZXQoYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFZhcmlhYmxlKHVuc2lnbmVk
IHZhcmlhYmxlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
dmFyaWFibGVzLnNldCh2YXJpYWJsZSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25h
YmxlUHJlZGljdGlvbiB2YXJpYWJsZSh1bnNpZ25lZCB2YXJpYWJsZSkKKyAgICB7CisgICAgICAg
IGlmICh2YXJpYWJsZSA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdldCh2
YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50VXBwZXJCb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHZhcmlh
YmxlVXBwZXJCb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAg
IAorICAgIHZvaWQgcGFjaygpCisgICAgeworICAgICAgICBwYWNrVmVjdG9yKG1fYXJndW1lbnRz
KTsKKyAgICAgICAgcGFja1ZlY3RvcihtX3ZhcmlhYmxlcyk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCBwYWNrVmVjdG9yKEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9y
JiB2ZWN0b3IpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsYXN0U2V0SW5kZXggPSAwOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAodmVjdG9yLmdldChpKSAhPSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAg
ICAgICAgICAgICAgIGxhc3RTZXRJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9y
LnJlc2l6ZShsYXN0U2V0SW5kZXggKyAxKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVBy
ZWRpY3Rpb25WZWN0b3IgbV9hcmd1bWVudHM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0
b3IgbV92YXJpYWJsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFj
dGlvbmFibGVQcmVkaWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsOSArMjQwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVy
biBtX2FsdGVybmF0aXZlLmdldCgpOyB9CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBy
ZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQog
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRQcmVkaWN0aW9ucyhQYXNzT3duUHRyPFByZWRpY3Rp
b25UcmFja2VyPiBwcmVkaWN0aW9ucykgeyBtX3ByZWRpY3Rpb25zID0gcHJlZGljdGlvbnM7IH0K
LSAgICAgICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkaWN0aW9ucy5nZXQoKTsgfQotCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
Jik7CiAKQEAgLTk3NSw4ICs5NzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBPd25Q
dHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPFBy
ZWRpY3Rpb25UcmFja2VyPiBtX3ByZWRpY3Rpb25zOwotCiAgICAgICAgIGludDMyX3QgbV9leGVj
dXRlQ291bnRlcjsKICAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
OwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAko
cmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGlj
dGlvblRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAKIAogI2luY2x1
ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLS8vIGhlbHBlciBmdW5jdGlvbiB0
byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7
IH0KLQogc3RydWN0IFByZWRpY3Rpb25TbG90IHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9uU2xv
dCgpCkBAIC01MCw0NiArNDYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBQ
cmVkaWN0aW9uVHJhY2tlcih1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlh
YmxlcykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV92
YXJpYWJsZXMobnVtVmFyaWFibGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0
aWFsaXplU2ltaWxhclRvKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIG1fYXJndW1lbnRzLnJlc2l6ZShvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAg
ICAgICAgbV92YXJpYWJsZXMucmVzaXplKG90aGVyLm51bWJlck9mVmFyaWFibGVzKCkpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvcHlMb2NhbHNGcm9tKGNvbnN0IFByZWRpY3Rpb25UcmFja2Vy
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzID0gb3RoZXIubV9hcmd1bWVudHM7
Ci0gICAgICAgIG1fdmFyaWFibGVzID0gb3RoZXIubV92YXJpYWJsZXM7Ci0gICAgfQotICAgIAot
ICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
LnNpemUoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhG
b3JPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVu
dHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBi
b29sIHByZWRpY3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50
c1thcmd1bWVudF0ubV92YWx1ZSwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
cHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJu
IHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSwgcHJlZGlj
dGlvbik7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kID49IDApOwotICAgICAgICAgICAgbV92
YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBw
cmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2ln
bmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9i
YWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CkBAIC0xMDIsMjAgKzU4LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBwcmVk
aWN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRp
Y3Rpb24odW5zaWduZWQgYXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbYXJndW1lbnRdLm1fdmFsdWU7Ci0gICAgfQotCi0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVk
aWN0aW9uKGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1
bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3Bl
cmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
c1tvcGVyYW5kXS5tX3ZhbHVlOwotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgfQot
ICAgIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2
YXJOdW1iZXIpCiAgICAgewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xv
dD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAg
LTEyNSw4ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxQcmVkaWN0aW9u
U2xvdCwgMTY+IG1fdmFyaWFibGVzOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25T
bG90PiBtX2dsb2JhbFZhcnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODMsNyArODMsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NQaGlTdGFjaygpOwog
ICAgIC8vIEFkZCBzcGlsbCBsb2NhdGlvbnMgdG8gbm9kZXMuCiAgICAgdm9pZCBhbGxvY2F0ZVZp
cnR1YWxSZWdpc3RlcnMoKTsKLQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJh
bmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSkpOworICAgICAgICByZXR1cm4gJm1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOworICAgIH0KKyAgICAKICAgICAvLyBHZXQv
U2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBO
b2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQogICAgIHsKQEAgLTExNiw3ICsxMjQsNyBAQCBwcml2
YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0
aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1
bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1
ZTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTEyOSwxNiArMTM3LDIxIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9y
IGJsb2NrcywKICAgICAgICAgLy8gZXhwYW5kIG1fcHJlc2VydmVkVmFycyB0byBjb3ZlciB0aGVz
ZS4KICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzID0gc3RkOjptYXgobV9wcmVzZXJ2ZWRWYXJzLCBv
cGVyYW5kICsgMSk7Ci0KLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsK
KyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgTm9k
ZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7
CiAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRC
bG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1f
bG9jYWxzW29wZXJhbmRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBub2RlSW5kZXggPSBh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gbm9k
ZUluZGV4OworICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRIZWFk
W29wZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5k
LCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2Nh
bHNbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3BlcmFuZCks
IHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGlu
ZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0x
NDcsMjAgKzE2MCwzNSBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9w
ZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50
cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c1thcmd1bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlOwogCiAgICAg
ICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0QXJndW1l
bnQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRo
ZSBmaXJzdCBiYXNpYyBibG9jazsgbGluaworICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2Nh
bCB0byB0aGUgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwo
KSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5v
cCA9PSBTZXRMb2NhbCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAKLSAgICAgICAgTm9kZUlu
ZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1l
bnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1
bWVudCkpOwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
b3BlcmFuZCksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1
bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4
OworICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2Fy
Z3VtZW50XS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVy
biBub2RlSW5kZXg7CiAgICAgfQogICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5v
ZGVJbmRleCB2YWx1ZSkKQEAgLTE2OCw3ICsxOTYsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1l
bnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1l
bnRzW2FyZ3VtZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVyYW5k
KSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJn
dW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFu
ZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCkBAIC02
ODgsNiArNzE2LDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0K
KyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2Ug
bWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cworICAgIC8vIHVzIHRvIHRyYWNrIGlm
IGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQs
IGFzCisgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5Lgor
ICAgIGlmICghbV9jdXJyZW50SW5kZXgpIHsKKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5y
ZXNpemUobV9udW1Bcmd1bWVudHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAg
Tm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVudCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKSk7CisgICAgICAgICAgICBt
X2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUo
c2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRU
YWlsW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOworICAgICAgICB9CisgICAg
fQogCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5pbnRlcnBy
ZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKQEAgLTE0MjEsMjAgKzE0NjIsMzYgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgCiAgICAgICAgIFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CiAg
ICAgICAgIHVuc2lnbmVkIHZhck5vID0gZW50cnkubV92YXJObzsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAg
IFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8g
cHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+
bV9sb2NhbHNbdmFyTm9dOworICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFj
a1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50
c0F0VGFpbFt2YXJOb10gOiBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107
CiAKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7
CiAgICAgICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgewotICAgICAg
ICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpKTsKLSAgICAgICAg
ICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAg
dmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyB2YXJObyAtIG1fY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
OiB2YXJObykpKTsKKyAgICAgICAgICAgICAgICB2YXIuc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVk
ZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0
YWNrKQorICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0
SGVhZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fs
c0F0SGVhZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywg
dmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkgeworICAg
ICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNz
RGF0YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgICAgIC8vIEdldExv
Y2FsIGFuZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5l
ZWQgdGhlIHR3bworICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZm
aWNpZW5jeSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCisgICAgICAg
ICAgICAgICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMg
YXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1
ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5Q
cmVkZWNlc3Nvcl0ub3AgPT0gUGhpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBy
ZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkYXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5
KGRhdGFGb3JQaGkpOwogCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gJm1fZ3JhcGhbZW50
cnkubV9waGldOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCkBAIC0xNDUy
LDggKzE1MDksOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVk
ZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8o
ZGF0YUZvclBoaSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBwaGlOb2RlID0gJm1fZ3Jh
cGhbZW50cnkubV9waGldOyAvLyByZWxvYWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQogICAgICAgICAg
ICAgTm9kZSYgbmV3UGhpTm9kZSA9IG1fZ3JhcGhbbmV3UGhpXTsKQEAgLTE1MjEsNiArMTU3OCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJn
dW1lbnRQaGlTdGFjaz4oKTsKICAgICAKICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyA9IG1f
cHJlc2VydmVkVmFyczsKKyAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAg
ICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
cmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgZW51bSBDb21waWxlTW9kZSB7IENv
bXBpbGVGdW5jdGlvbiwgQ29tcAogaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21w
aWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBHcmFwaCBkZmc7CiAgICAgaWYg
KCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKQEAgLTQ3LDE1ICs0Nyw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1v
ZGUgY29tcGlsZU0KICAgICAKICAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogICAgIAotICAgIC8vIFNhdmUgdGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRo
YXQgT1NSIGVudHJ5IGNhbiB2ZXJpZnkgdGhlbS4gUHJlZGljdGlvbnMKLSAgICAvLyBhcmUgc2F2
ZWQgaW4gdGhlIENvZGVCbG9jayBmcm9tIHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5
LCBzaW5jZSB0aGUKLSAgICAvLyBDb2RlQmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkg
YmUgcmVwbGFjZWQgYXQgYW55IHRpbWUuCi0gICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBw
cmVkaWN0aW9ucyA9IGFkb3B0UHRyKG5ldyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKLSAgICAqcHJl
ZGljdGlvbnMgPSBkZmcucHJlZGljdGlvbnMoKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+c2V0UHJlZGljdGlvbnMocHJlZGljdGlvbnMucmVsZWFzZSgpKTsKLSAgICAKICAgICBK
SVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CiAgICAg
aWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzOSBAQCBjb25zdCBjaGFyICpH
cmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9k
ZUlkTWFza107CiB9CiAKK2NvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEpCit7CisgICAgLy8gVmFy
aWFibGVzIGFyZSBhbHJlYWR5IG51bWJlcmVkLiBGb3IgcmVhZGFiaWxpdHkgb2YgSVIgZHVtcHMs
IHRoaXMgcmV0dXJucworICAgIC8vIGFuIGFscGhhYmV0aWMgbmFtZSBmb3IgdGhlIHZhcmlhYmxl
IGFjY2VzcyBkYXRhLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvCisgICAgLy8gcmVhc29uIGFi
b3V0IHR3byBudW1iZXJzICh2YXJpYWJsZSBudW1iZXIgYW5kIGxpdmUgcmFuZ2UgbnVtYmVyKSwg
YnV0IGluc3RlYWQKKyAgICAvLyBhIG51bWJlciBhbmQgYSBsZXR0ZXIuCisgICAgCisgICAgdW5z
aWduZWQgaW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICgmbV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0gPT0gdmFyaWFibGVBY2Nl
c3NEYXRhKSB7CisgICAgICAgICAgICBpbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5kZXggIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAKKyAgICBpZiAoIWluZGV4KQorICAgICAgICBy
ZXR1cm4gIkEiOworCisgICAgc3RhdGljIGNoYXIgYnVmWzEwXTsKKyAgICBCb3VuZHNDaGVja2Vk
UG9pbnRlcjxjaGFyPiBwdHIoYnVmLCBzaXplb2YoYnVmKSk7CisgICAgCisgICAgd2hpbGUgKGlu
ZGV4KSB7CisgICAgICAgICpwdHIrKyA9ICdBJyArIChpbmRleCAlIDI2KTsKKyAgICAgICAgaW5k
ZXggLz0gMjY7CisgICAgfQorICAgIAorICAgICpwdHIrKyA9IDA7CisgICAgCisgICAgcmV0dXJu
IGJ1ZjsKK30KKwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKQEAgLTEx
NiwxMiArMTQ5LDE0IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28K
ICAgICAgICAgICAgIHByaW50ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9k
ZS5pZGVudGlmaWVyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9
Ci0gICAgaWYgKG5vZGUuaGFzTG9jYWwoKSkgewotICAgICAgICBpbnQgbG9jYWwgPSBub2RlLmxv
Y2FsKCk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChsb2NhbCkpCi0gICAgICAgICAg
ICBwcmludGYoIiVzYXJnJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBsb2NhbCAtIGNvZGVC
bG9jay0+dGhpc1JlZ2lzdGVyKCkpOworICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpID09IG5vZGUuaGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCkpIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IHZh
cmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpCisgICAgICAgICAgICBwcmludGYoIiVzYXJnJXUoJXMpIiwgaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgb3BlcmFuZCAtIGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIG5hbWVP
ZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcHJpbnRmKCIlc3IldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2Fs
KTsKKyAgICAgICAgICAgIHByaW50ZigiJXNyJXUoJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAi
Iiwgb3BlcmFuZCwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkp
OwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29u
c3RhbnQpIHsKQEAgLTE0NSw4ICsxODAsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBu
b2RlSW5kZXgsIENvCiAgICAgcHJpbnRmKCIpIik7CiAKICAgICBpZiAoIXNraXBwZWQpIHsKLSAg
ICAgICAgaWYgKG5vZGUuaGFzTG9jYWwoKSkKLSAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0
aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKGdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKSkp
OworICAgICAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAg
IHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICBlbHNlIGlmIChub2RlLmhh
c1Zhck51bWJlcigpKQogICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVk
aWN0aW9uVG9TdHJpbmcoZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKSkp
OwogICAgICAgICBlbHNlIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKQEAgLTIwNCwxMCArMjM5
LDEwIEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHZvaWQgR3JhcGg6
OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgaWYgKGV4ZWMpIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRz
ID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9wcmVkaWN0
aW9ucy5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1l
bnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1
bWVudHMuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFy
ZyA8IG51bWJlck9mQXJndW1lbnRzOyArK2FyZykKLSAgICAgICAgICAgIG1fcHJlZGljdGlvbnMu
cHJlZGljdEFyZ3VtZW50KGFyZywgcHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChh
cmcgLSAxKSkpOworICAgICAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChhcmcg
LSAxKSkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKQEAgLTIyMCwxMCAr
MjU1LDEwIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGEKICAgICAg
ICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAg
ICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkp
OwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50
ZigiQXJndW1lbnQgWyVsdV0gcHJlZGljdGlvbjogJXNcbiIsIGFyZywgcHJlZGljdGlvblRvU3Ry
aW5nKG1fcHJlZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKKyAgICAgICAg
cHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9u
VG9TdHJpbmcoYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKSkpOwogI2VuZGlmCiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkgQEAgY2xhc3MgRXhlY1N0
YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1
aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29sIG9wZXJh
bmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQorCiB0eXBl
ZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiAKIC8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3
ZSB0cmFjayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCkBAIC01Myw2ICs1
NiwxMiBAQCBzdHJ1Y3QgVmFyaWFibGVSZWNvcmQgewogICAgICAgICA6IHZhbHVlKE5vTm9kZSkK
ICAgICB7CiAgICAgfQorICAgIAorICAgIHZvaWQgc2V0Rmlyc3RUaW1lKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUgPT0gTm9Ob2RlKTsKKyAgICAgICAg
dmFsdWUgPSBub2RlSW5kZXg7CisgICAgfQogCiAgICAgTm9kZUluZGV4IHZhbHVlOwogfTsKQEAg
LTExMCw4ICsxMTksMTAgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIGJlZ2luKGJl
Z2luKQogICAgICAgICAsIGVuZChOb05vZGUpCiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2Up
Ci0gICAgICAgICwgbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fbG9jYWxz
KG51bUxvY2FscykKKyAgICAgICAgLCBtX2FyZ3VtZW50c0F0SGVhZChudW1Bcmd1bWVudHMpCisg
ICAgICAgICwgbV9sb2NhbHNBdEhlYWQobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRz
QXRUYWlsKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0VGFpbChudW1Mb2NhbHMp
CiAgICAgewogICAgIH0KIApAQCAtMTI2LDggKzEzNywxMiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7
CiAgICAgYm9vbCBpc09TUlRhcmdldDsKIAogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vz
c29yczsKLSAgICBWZWN0b3IgPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50czsKLSAgICBW
ZWN0b3IgPFZhcmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHM7CisgICAgCisgICAgVmVjdG9yPFZh
cmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKKyAgICBWZWN0b3I8VmFyaWFibGVS
ZWNvcmQsIDE2PiBtX2xvY2Fsc0F0SGVhZDsKKyAgICAKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNv
cmQsIDg+IG1fYXJndW1lbnRzQXRUYWlsOworICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+
IG1fbG9jYWxzQXRUYWlsOwogfTsKIAogLy8gCkBAIC0xMzgsMTEgKzE1Myw2IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3Rv
ciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+
IHsKIHB1YmxpYzoKLSAgICBHcmFwaCh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bVZhcmlhYmxlcykKLSAgICAgICAgOiBtX3ByZWRpY3Rpb25zKG51bUFyZ3VtZW50cywgbnVtVmFy
aWFibGVzKQotICAgIHsKLSAgICB9Ci0KICAgICAvLyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZl
cmVuY2VkLgogICAgIHZvaWQgcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTcx
LDE2ICsxODEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3NbYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAgICAgCi0gICAgUHJl
ZGljdGlvblRyYWNrZXImIHByZWRpY3Rpb25zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3By
ZWRpY3Rpb25zOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rp
b25zLnByZWRpY3Qob3BlcmFuZCwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAogICAgIGJvb2wg
cHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3RHbG9iYWxW
YXIodmFyTnVtYmVyLCBwcmVkaWN0aW9uKTsKQEAgLTE5MCwxMSArMTkwLDEyIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICBjYXNlIEdldExvY2Fs
OgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uKTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNl
IFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldHVybiBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFsVmFyKG5vZGUu
dmFyTnVtYmVyKCksIHByZWRpY3Rpb24pOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2UgR2V0QnlW
YWw6CkBAIC0yMTIsMTEgKzIxMyw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAg
IFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3ByZWRpY3Rpb25zLmdldFByZWRpY3Rpb24ob3BlcmFuZCk7Ci0gICAgfQotICAg
IAogICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJO
dW1iZXIpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRHbG9iYWxWYXJQ
cmVkaWN0aW9uKHZhck51bWJlcik7CkBAIC0yNDQsNyArMjQwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG5vZGVQdHItPmxvY2FsKCkpOwor
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAg
ICBjYXNlIFBoaToKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsK
ICAgICAgICAgY2FzZSBHZXRCeUlkOgpAQCAtMzI0LDYgKzMyMyw5IEBAIHB1YmxpYzoKIAogI2lm
bmRlZiBOREVCVUcKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKKyAg
ICAKKyAgICAvLyBUaGlzIGlzIE8obiksIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciB2ZXJi
b3NlIGR1bXBzLgorICAgIGNvbnN0IGNoYXIqIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShWYXJp
YWJsZUFjY2Vzc0RhdGEqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBl
cyhFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKQEAgLTMzMyw3ICszMzUsMTAgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxNZXRob2RDaGVja0RhdGE+IG1fbWV0aG9kQ2hlY2tEYXRhOwogICAgIFZlY3Rv
cjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8UmVz
b2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CisgICAgVmVjdG9yPE5vZGVJbmRl
eCwgOD4gbV9hcmd1bWVudHM7CisgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0
YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFy
czsKKyAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNs
b3RzOwogcHJpdmF0ZToKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNDAgKzM5MywyMyBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCiAgICAgICAgIE9TUkVudHJ5RGF0
YSogZW50cnkgPSBjb2RlQmxvY2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2su
Ynl0ZWNvZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkp
OwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIGxhc3RMaXZlTG9jYWwgPSAwOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9k
ZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgQWN0aW9u
YWJsZVByZWRpY3Rpb25zIGFjdGlvbmFibGVQcmVkaWN0aW9ucyhiYXNpY0Jsb2NrLm1fYXJndW1l
bnRzQXRIZWFkLnNpemUoKSwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRI
ZWFkLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFz
aWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5z
ZXRBcmd1bWVudChpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3Jh
cGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Js
b2NrLm1fbG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5t
X2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbGFzdExpdmVMb2Nh
bCA9IGk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9j
YWxzQXRIZWFkLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChu
b2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9u
cy5zZXRWYXJpYWJsZShpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1f
Z3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7Ci0gICAg
ICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsg
MSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVB
cmd1bWVudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVu
dHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
QXJndW1lbnRzLnNldChpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobGFzdExpdmVMb2NhbCkgewotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxl
cy5yZXNpemUobGFzdExpdmVMb2NhbCArIDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZh
cmlhYmxlcy5jbGVhckFsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlTG9jYWw7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
IChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAg
ICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgp
OworICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMucGFjaygpOworICAgICAgICAKKyAgICAg
ICAgZW50cnktPm1fcHJlZGljdGlvbnMgPSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBs
b2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBk
YXRhZmxvdyBncmFwaHMuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC0x
MDgsNiArMTA5LDUxIEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Owog
fTsKIAorY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxl
QWNjZXNzRGF0YT4geworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgICAg
IDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwpCisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24o
UHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsK
KyAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBvcGVyYW5kKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOworICAgIH0K
KyAgICAKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJl
ZGljdGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5j
ZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUg
b3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CisgICAgLy8g
cHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVj
dCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJl
IHNpZ25pZmljYW50LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAgUHJlZGlj
dGVkVHlwZSBtX3ByZWRpY3Rpb247Cit9OworCiB0eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZs
YWdzOwogI2RlZmluZSBOb2RlVXNlQm90dG9tICAgICAgMHgwMAogI2RlZmluZSBOb2RlVXNlZEFz
TnVtYmVyICAgMHgwMQpAQCAtMjIzLDYgKzI2OSw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogYXJpdGhOb2RlRmxhZ3MKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUGhpLCAwKSBcCiAgICAgXAorICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRz
IGJlaW5nIHNldC4gKi9cCisgICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKKyAgICBcCiAgICAg
LyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBO
b2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhCaXRPciwgTm9kZVJlc3VsdEludDMyKSBcCkBA
IC00NTcsMTUgKzUwNiwzMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnROb2RlKGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CiAg
ICAgfQogICAgIAorICAgIGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBib29sIGhhc0xvY2FsKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcCA9PSBHZXRMb2NhbCB8fCBvcCA9PSBTZXRMb2NhbDsK
KyAgICAgICAgcmV0dXJuIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgIH0KLQorICAgIAor
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZv
KS0+ZmluZCgpOworICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGhhc0xvY2FsKCkpOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxS
ZWdpc3RlciltX29wSW5mbzsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5s
b2NhbCgpOwogICAgIH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwyMyArMzUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWlubGlu
ZSBib29sIHByZWRpY3Rpb25Jc1ZhbGlkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1
ZSB2YWx1ZSwgUHJlZGljdGVkVHlwZSB0eXBlKQotewotICAgIC8vIHRoaXMgdGFrZXMgaW50byBh
Y2NvdW50IG9ubHkgbG9jYWwgdmFyaWFibGUgcHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQK
LSAgICAvLyBvbiBTZXRMb2NhbC4KLSAgICAKLSAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlw
ZSkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7Ci0gICAgCi0gICAgaWYgKGlzQXJy
YXlQcmVkaWN0aW9uKHR5cGUpKQotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEs
IHZhbHVlKTsKLSAgICAKLSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX09TUl9FTlRS
WSkKQEAgLTY2LDcgKzQ5LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogI2VuZGlmCiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2st
PmRmZ09TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgQVNTRVJUKGVudHJ5LT5tX2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CkBAIC05
NSwyNiArNzcsMzQgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwog
ICAgIC8vICAgIGludG8gYSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ug
b2YgYWN0aW9uIGlzIHRvIHNpbXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgog
ICAgIAotICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5wcmVkaWN0aW9ucygpOwotICAgIAotICAgIGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZB
cmd1bWVudHMoKSA+IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9u
cy0+bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1f
bGl2ZUFyZ3VtZW50cy5zaXplKCkgJiYgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5nZXQoaSkKLSAg
ICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVu
dChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBw
ZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlv
biA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50KGkpOworICAgICAgICBpZiAocHJlZGlj
dGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKGkgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgewor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIiAgICBPU1Ig
ZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxu
IiwgaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwg
cHJlZGljdGlvbikpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAg
cHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3Rl
ZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0
aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOworICAg
ICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVz
LCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigp
LCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsK
LSAgICAgICAgaWYgKGkgPCBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNpemUoKSAmJiBlbnRyeS0+
bV9saXZlVmFyaWFibGVzLmdldChpKQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlk
KGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMt
PmdldFByZWRpY3Rpb24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5
LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0
aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlh
YmxlKGkpOworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9u
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2Jl
eXNQcmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwg
cHJlZGljdGlvbikpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAg
cHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3Rl
ZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigp
LCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyAg
ICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAl
cywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVz
Y3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjksNyArMTE5LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIGlm
ICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJl
Z2lzdGVycygpW2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSBzdGFjayBncm93dGggZmFpbGVkLi5cbiIpOworICAgICAgICBwcmludGYoIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERGR09TUkVu
dHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5o
PgorI2luY2x1ZGUgIkFjdGlvbmFibGVQcmVkaWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0zOSw4ICszOSw3IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7
CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNv
ZGVPZmZzZXQ7Ci0gICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKLSAgICBCaXRWZWN0b3Ig
bV9saXZlVmFyaWFibGVzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25z
OwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NS
RW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDE0ICsz
MTksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3Jh
cGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV9wcmVkaWN0aW9uc1tub2Rl
LmNoaWxkMSgpXSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3QobV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01NTgsMTUgKzU1OCwxNiBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNl
RXJyb3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vz
bid0IGRvIGFueXRoaW5nLgotICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2UgU2V0
QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMg
aWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisgICAgICAgIGNhc2UgUGhh
bnRvbToKKyAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsx
NTUsMjAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogI2lmbmRl
ZiBOREVCVUcKIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAogewotICAg
IGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7CisgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICBjYXNlIFNvdXJjZU5vdFNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RT
ZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAg
ICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEludDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgZnByaW50ZihvdXQsICJO
b2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lk
IFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdApAQCAtMjAzLDkgKzIxNiw5IEBA
IE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2gKIHsKICAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMu
c2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQt
PmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmRGb3JBcmd1bWVudChhcmd1bWVudCksIGpp
dC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRd
ID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50
XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJs
ZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBq
aXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhcmlhYmxlLCBqaXQtPm1fdmFyaWFibGVzW3Zh
cmlhYmxlXSk7CisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwogfQogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtNjk1LDcgKzcwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlv
bihub2RlLmxvY2FsKCkpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAKICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8g
Y29tcGlsZS4KICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKQEAgLTc3
MCw3ICs3ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiAhbmV4dE5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKICAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NS
ID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIAotICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rp
b24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJ
bnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2Nh
bCgpKSk7CkBAIC03OTMsOSArODA2LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBs
b25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAvLyB0aGlz
IGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0
aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5k
KG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZSgpOworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcDsgaXQganVzdCBtYXJr
cyB0aGUgZmFjdCB0aGF0IHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkLgorICAgICAgICAvLyBC
dXQgaXQgbWF5IGJlIHByb2ZpdGFibGUgdG8gdXNlIHRoaXMgYXMgYSBob29rIHRvIHJ1biBzcGVj
dWxhdGlvbiBjaGVja3MKKyAgICAgICAgLy8gb24gYXJndW1lbnRzLCB0aGVyZWJ5IGFsbG93aW5n
IHVzIHRvIHRyaXZpYWxseSBlbGltaW5hdGUgc3VjaCBjaGVja3MgaWYKKyAgICAgICAgLy8gdGhl
IGFyZ3VtZW50IGlzIG5vdCB1c2VkLgorICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQml0QW5k
OgogICAgIGNhc2UgQml0T3I6CkBAIC0xMzg3LDggKzE0MDcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3Ig
KDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUg
YmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIE5v
ZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYg
KGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFw
aCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBpZiAoYmFzZU5v
ZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKGJhc2VOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKSB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJC
T1NFKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaGVja0FycmF5KEAldSkgICAiLCBu
b2RlLmNoaWxkMSgpKTsKKyNlbmRpZgogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUg
YXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQg
aGVscCB0byBjYWNoZQpAQCAtMTQyMiw4ICsxNDQ2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFy
cmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1f
dmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2Ug
dG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgogICAgICAgICBOb2RlJiBi
YXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChiYXNl
Tm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5n
ZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKGJhc2VOb2RlLm9w
ICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihiYXNlTm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdGlvbigpKSkgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hlY2tBcnJheUAldSAgICIsIG5vZGUuY2hp
bGQxKCkpOworI2VuZGlmCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICB9CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAg
ICAgcHJvcGVydHkudXNlKCk7CkBAIC0yMTMzLDEwICsyMTYxLDI0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkg
PT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291
cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9k
ZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5z
aXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFk
W2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclBy
ZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKQEAgLTIyMDcsOSArMjI0OSwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAgICAgQVNT
RVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFt
ZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
KFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7
Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0
UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpW21faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0y
MjMyLDEyMSArMjI4MCwxMjkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3Vy
Y2UpCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCiB7Ci0gICAgaWYgKCF2YWx1ZVNvdXJj
ZS5pc1NldCgpKSB7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgaXNJbnQz
MlByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG9wZXJhbmQpKSkKLSAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94
ZWRJbnQzMigpOworICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uua2luZCgpKSB7CisgICAgY2FzZSBW
YWx1ZUluUmVnaXN0ZXJGaWxlOgogICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpKQotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsK
KyAgICAgICAgCisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAg
ICAgICAgCisgICAgY2FzZSBIYXZlTm9kZTogeworICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFu
dCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUlu
ZGV4KCkpKTsKKyAgICAKKyAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3Zh
bHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5l
cmF0ZSgpKSB7CisgICAgICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwg
bm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAorICAgICAgICAgICAg
Ly8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0
aGUgT1NSLgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgCi0gICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5n
cmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKLSAgICBpZiAoIW5vZGVQdHItPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4s
IG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKLSAgICAgICAgLy8g
ZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUg
T1NSLgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSk7Ci0gICAgfQotICAgIAotICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJh
dGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgIGlmICghaW5mb1B0ci0+
YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgo
KSkgewotICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2Rl
IHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KLSAgICAgICAgLy8gVGhlcmUg
YXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVmFsdWVUb051
bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9O
dW1iZXIgbm9kZQotICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmlu
ZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCi0gICAgICAgIC8vICAg
IFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRl
IFZhbHVlVG9OdW1iZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlr
ZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlz
Ci0gICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYg
dGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgotICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRv
TnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAot
ICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBj
b252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCi0gICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZl
IGNvbnZlcnRlZCB0byBJbnQzMi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVUludDMyVG9OdW1i
ZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051
bWJlcgotICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVz
IHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKLSAgICAgICAgLy8gICAgcmF0aGVy
IHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
cmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVy
LCBidXQgaXRzCi0gICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKLSAgICAgICAgLy8gICAgdGhl
IG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAg
ICAKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICBub2RlUHRyID0gJm1faml0
LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9u
SW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICBpZiAoaW5mb1B0
ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCi0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWZvdW5kKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9O
b2RlOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOwot
ICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsg
dmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lz
dGVyKSB7Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChp
bmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5k
ZXgoKV07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVUb051bWJlcjoKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMy
OgotICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBp
bmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9b
bm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICBpZiAoIWluZm9QdHItPmFsaXZl
KCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsK
KyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUg
dGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgorICAgICAgICAgICAgLy8gVGhl
cmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlz
IGEgVmFsdWVUb051bWJlciBub2RlCisgICAgICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRo
YXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBh
CisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVz
LCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBs
aXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50
MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50
MzIKKyAgICAgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVy
IGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAgICAgICAgICAvLyAgICBtZWFu
cyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVy
IHdoaWxlCisgICAgICAgICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8g
SW50MzIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElm
IHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgor
ICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0
aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAgICAgICAgICAvLyAgICByYXRo
ZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50
MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3Rp
bGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgorICAg
ICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50
ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7
CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1
YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBp
bmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5v
Tm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05v
ZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05v
ZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyAr
K3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRv
TnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXgg
PSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhU
b1VzZTsKLSAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAg
ICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OwotICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7Ci0gICAgICAgICAgICBlbHNl
IGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2Rl
SW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZh
bHVlVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJ
bmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFs
dWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJ
bmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWlu
dDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRvVXNlXTsKLSAgICAgICAgICAgICAgICBpbmZvUHRy
ID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgp
ID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAg
ICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVh
bFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUo
KSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgfQorICAg
ICAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICAKLSAgICBBU1NFUlQo
aW5mb1B0ci0+YWxpdmUoKSk7CisgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKIAot
ICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7Ci0g
ICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
Ci0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkp
OwotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGlu
Zm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOwotICAgIH0KLSAgICBpZiAoaW5mb1B0ci0+c3BpbGxG
b3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVy
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGlmIChpbmZvUHRyLT5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5KCk7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjYgKzY2LDUzIEBAIHByaXZhdGU6CiAg
ICAgR1BSUmVnIG1fc3JjOwogfTsKIAorZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJj
ZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZp
bGUsCisgICAgSGF2ZU5vZGUKK307CisKIGNsYXNzIFZhbHVlU291cmNlIHsKIHB1YmxpYzoKICAg
ICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgICAgICA6
IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVT
b3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZhbHVl
U291cmNlS2luZCkpCiAgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5vdFNl
dCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOwogICAgIH0KICAgICAKICAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgICAgICA6IG1f
bm9kZUluZGV4KG5vZGVJbmRleCkKICAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2
ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2UgZm9yUHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50
MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgICAgICByZXR1cm4ga2lu
ZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKKyAgICB9CisgICAg
CisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKICAgICB9CiAgICAgCiAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOwogICAgICAgICByZXR1cm4gbV9ub2Rl
SW5kZXg7CiAgICAgfQogICAgIApAQCAtOTQsNiArMTIxLDIwIEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZUluZGV4IG5vZGVJbmRleEZyb21LaW5kKFZh
bHVlU291cmNlS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPj0gU291cmNl
Tm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBOb05vZGUgLSBraW5k
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2VLaW5kIGtpbmRGcm9tTm9kZUlu
ZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBraW5kID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9kZSAtIG5vZGVJbmRleCk7CisgICAgICAgIGlmIChr
aW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1
cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+
KGtpbmQpOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiB9OwogICAg
IApAQCAtNTY5LDcgKzYxMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gVHJhY2tpbmcgZm9y
IHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50
cyBhbmQgYnl0ZWNvZGUKICAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgotCisgICAg
CiAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5k
KTsKQEAgLTYwMiwxMSArNjQzLDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGFzdFNldE9wZXJh
bmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOwogICAgIAotICAgIFZhbHVl
UmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQsIGNvbnN0IFZhbHVl
U291cmNlJik7CisgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25z
dCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihvcGVyYW5kLCB2YWx1ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9w
ZXJhbmQpKTsKICAgICB9CiB9OwogCkBAIC04MzEsNyArODcyLDcgQEAgaW5saW5lIFNwZWN1bGF0
aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRy
dWUpCiAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKLSAgICAsIG1fdmFyaWFibGVzKGppdC5jb2RlQmxv
Y2soKS0+bV9udW1WYXJzKQorICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZh
cnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJ
bnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tl
ZEludFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YWNrZWRJbnRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYWNrZWRJbnRW
ZWN0b3JfaAorI2RlZmluZSBQYWNrZWRJbnRWZWN0b3JfaAorCisjaW5jbHVkZSAiQml0VmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gY3Jl
YXRlIGFuIGFycmF5IG9mIGludGVnZXJzLCB3aGVyZSB0aG9zZQorLy8gaW50ZWdlcnMgaGF2ZSBv
bmx5IGEgaGFuZGZ1bCBvZiBiaXRzIGVhY2guIEl0IGlzIG5vdCBtZWFudCB0byBiZQorLy8gZWZm
aWNpZW50IGluIHRpbWUsIGJ1dCBvbmx5IGluIHNwYWNlLiAoVGhvdWdoIG1ha2luZyBpdCBlZmZp
Y2llbnQKKy8vIGluIHRpbWUgZm9yIHBvd2VyLW9mLTIgdmFsdWVzIG9mIGJpdENvdW50IHdvdWxk
IG5vdCBiZSBkaWZmaWN1bHQuKQorLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBhcyBl
eHBlY3RlZCBmb3Igc2lnbmVkIHR5cGVzLCBpZiB5b3UKKy8vIGFyZSByZWx5aW5nIG9uIHRoZSBz
aWduIGJlaW5nIHByZXNlcnZlZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgYml0
Q291bnQ+CitjbGFzcyBQYWNrZWRJbnRWZWN0b3IgeworcHVibGljOgorICAgIFBhY2tlZEludFZl
Y3RvcigpCisgICAgeworICAgICAgICBBU1NFUlQoYml0Q291bnQpOworICAgICAgICBBU1NFUlQo
Yml0Q291bnQgPCBzaXplb2Yodm9pZCopICogOCk7CisgICAgfQorICAgIAorICAgIFBhY2tlZElu
dFZlY3Rvcihjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0cyhv
dGhlci5tX2JpdHMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJbnRWZWN0b3ImIG9w
ZXJhdG9yPShjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9i
aXRzID0gb3RoZXIubV9iaXRzOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdHMuc2l6
ZSgpIC8gYml0Q291bnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlU2l6ZShzaXplX3Qg
bnVtSW50cykKKyAgICB7CisgICAgICAgIG1fYml0cy5lbnN1cmVTaXplKG51bUludHMgKiBiaXRD
b3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1JbnRzKQorICAg
IHsKKyAgICAgICAgbV9iaXRzLnJlc2l6ZShudW1JbnRzICogYml0Q291bnQpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyQWxsKCkKKyAgICB7CisgICAgICAgIG1fYml0cy5jbGVhckFsbCgp
OworICAgIH0KKyAgICAKKyAgICBUIGdldChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICB1aW50cHRyX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRl
eCA9IDA7IHN1YkluZGV4IDwgYml0Q291bnQ7ICsrc3ViSW5kZXgpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA8PD0gMTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX2JpdHMuZ2V0KGluZGV4ICogYml0
Q291bnQgKyBzdWJJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBpbmRleCwgVCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFyaXRobWV0aWMgdXNpbmcgdWludHB0cl90LCBi
ZWNhdXNlICgxKSB3ZSBrbm93IHdoYXQgaXQgaXMKKyAgICAgICAgLy8gKFQgbWlnaHQgYmUgYW4g
ZW51bSkgYW5kICgyKSBpdCdzIHRoZSBsYXJnZXN0IGludGVnZXIgdHlwZSB0aGF0CisgICAgICAg
IC8vIGlzIGxpa2VseSB0byBwZXJmb3JtIGRlY2VudGx5IHdlbGwuCisgICAgICAgIHVpbnRwdHJf
dCBteVZhbHVlID0gc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIAorICAg
ICAgICAvLyBQcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgbm90IG91
dCBvZiByYW5nZS4KKyAgICAgICAgQVNTRVJUKChteVZhbHVlICYgbWFzaygpKSA9PSBteVZhbHVl
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3VudDsg
c3ViSW5kZXgtLSA+IDA7KSB7CisgICAgICAgICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0Q291
bnQgKyBzdWJJbmRleCwgISEobXlWYWx1ZSAmIDEpKTsKKyAgICAgICAgICAgIG15VmFsdWUgPj49
IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayB0
aGF0IHdlIHN0b3JlZCB3aGF0IHRoZSB1c2VyIHRob3VnaHQgd2UKKyAgICAgICAgLy8gc3RvcmVk
LgorICAgICAgICBBU1NFUlQoZ2V0KGluZGV4KSA9PSB2YWx1ZSk7CisgICAgfQorcHJpdmF0ZToK
KyAgICAvLyBUaGlzIHJldHVybnMgdGhlIG1hc2ssIGFuZCBpcyBjYXJlZnVsIHRvIG5vdCBzdGVw
IG9uIHRoZSB3cmFwLWFyb3VuZAorICAgIC8vIHNlbWFudGljcyBvZiB0aGUgc2hpZnQgYW1vdW50
ICgxIDw8IDMyIGlzIDEgc2luY2UgMzIgd3JhcHMgdG8gMCkuIFRoZXJlCisgICAgLy8gaXMgdGhl
IHNlcGFyYXRlIHF1ZXN0aW9uIG9mIHdoeSB5b3Ugd291bGQgZXZlciB1c2UgdGhpcyB0byBzdG9y
ZSAzMi1iaXQKKyAgICAvLyBvciA2NC1iaXQgdmFsdWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXR0
ZXIgdG8gaGF2ZSB0aGlzIHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAvLyBpbiBzdWNoIHNpdHVhdGlv
bnMgcmVnYXJkbGVzcy4KKyAgICBzdGF0aWMgdWludHB0cl90IG1hc2soKSB7IHJldHVybiAoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCAoYml0Q291bnQgLSAxKSkgLSAxOyB9CisgICAgICAg
ICAgICAgICAKKyAgICAvLyBTdG9yZXMgaW50ZWdlcnMgYml0IGJ5IGJpdCBpbiBiaWcgZW5kaWFu
LgorICAgIEJpdFZlY3RvciBtX2JpdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpQYWNrZWRJbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBQYWNrZWRJbnRWZWN0b3JfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFVuaW9uRmluZF9oCisjZGVmaW5lIFVuaW9uRmluZF9oCisKKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBVbmlvbkZpbmQg
Y2xhc3MgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBkaXNqb2ludCBzZXRzIHVzaW5nIHRoZQorLy8g
ZGlzam9pbnQtc2V0IGZvcmVzdCBkYXRhIHN0cnVjdHVyZS4gRWFjaCBVbmlvbkZpbmQgaW5zdGFu
Y2UgaXMgYQorLy8gbm9kZSBpbiB0aGUgZm9yZXN0LiBUeXBpY2FsbHkgeW91IHVzZSBpdCBieSB1
c2luZyBVbmlvbkZpbmQgYXMgYQorLy8gc3VwZXJjbGFzczoKKy8vCisvLyBjbGFzcyBNZW1iZXJP
ZlNldDogcHVibGljIFVuaW9uRmluZDxNZW1iZXJPZlNldD4geyAuLi4gfQorLy8KKy8vIENhbGxp
bmcgeC0+ZmluZCgpIGdpdmVzIHlvdSBhIE1lbWJlck9mU2V0KiB0aGF0IHJlcHJlc2VudHMgdGhl
CisvLyBkaXNqb2ludCBzZXQgdGhhdCB4IGJlbG9uZ3MgdG8uIENhbGxpbmcgeC0+dW5pZnkoeSkg
dW5pZmllcyB4J3MKKy8vIHNldCB3aXRoIHkncyBzZXQsIGFuZCBlbnN1cmVzIHRoYXQ6CisvLwor
Ly8geC0+ZmluZCgpID09IHktPmZpbmQoKQorLy8KKy8vIGFuZCB0aGF0OgorLy8KKy8vIGEtPmZp
bmQoKSA9PSBiLT5maW5kKCkKKy8vCisvLyBmb3IgYW55IGEsIGIgaWYgcHJpb3IgdG8gdGhlIGNh
bGwgdG8geC0+dW5pZnkoeSksIHdlIHdvdWxkIGhhdmUKKy8vIGhhZDoKKy8vCisvLyBhLT5maW5k
KCkgPT0geAorLy8gYi0+ZmluZCgpID09IHkKKy8vCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlz
IGFsbW9zdCBhbW9ydGl6ZWQgTygxKSwgYnV0IGNvdWxkIGJlIHdvcnNlCisvLyBpbiB1bmxpa2Vs
eSBwYXRob2xvZ2ljYWwgY2FzZXMuIEl0IGZhdm9ycyBoYXZpbmcgYSBub24tcmVjdXJzaXZlCisv
LyBzaW5nbGUgcGFzcyBpbXBsZW1lbnRhdGlvbiBvZiB1bmlmeSgpIGFuZCBmaW5kKCkgb3ZlciBl
bnN1cmluZyB0aGUKKy8vIHRoZW9yZXRpY2FsIE8oSW52ZXJzZUFja2VybWFubltuXSkgYW1vcnRp
emVkIGJvdW5kLCB3aGljaCBpcyBtdWNoCisvLyBjbG9zZXIgdG8gYW1vcnRpemVkIE8oMSkuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBVbmlvbkZpbmQgeworcHVibGljOgorICAgIFVu
aW9uRmluZCgpCisgICAgICAgIDogbV9wYXJlbnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFQqIGZpbmQoKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpOworICAgICAgICBUKiBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgd2hpbGUg
KG5leHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0g
cmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSB0aGlzKQorICAgICAgICAgICAgbV9wYXJlbnQgPSByZXN1bHQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdW5pZnkoVCog
b3RoZXIpCisgICAgeworICAgICAgICBUKiBhID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5maW5k
KCk7CisgICAgICAgIFQqIGIgPSBvdGhlci0+ZmluZCgpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKCFhLT5tX3BhcmVudCk7CisgICAgICAgIEFTU0VSVCghYi0+bV9wYXJlbnQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIGEtPm1fcGFyZW50ID0gYjsKKyAgICB9Citwcml2YXRlOgorICAgIFQqIG1fcGFyZW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VW5pb25GaW5kOworCisj
ZW5kaWYgLy8gVW5pb25GaW5kX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108909</attachid>
            <date>2011-09-27 15:06:52 -0700</date>
            <delta_ts>2011-09-27 21:43:21 -0700</delta_ts>
            <desc>the patch - fix changelog</desc>
            <filename>liverangesplit_patch_9.diff</filename>
            <type>text/plain</type>
            <size>85066</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEwIEBA
CisyMDExLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlw
ZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQ
cmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6QWN0aW9u
YWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQ
cmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlv
bnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnRV
cHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2YXJpYWJs
ZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2sp
OgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3IpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rp
b25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1Bo
aVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAg
ICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om5h
bWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElzQXJndW1l
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6UGFja2VkSW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRJbnRWZWN0b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6
Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmdldCk6CisgICAgICAg
IChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVj
dG9yOjptYXNrKToKKyAgICAgICAgKiB3dGYvVW5pb25GaW5kLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmlvbkZpbmQ6OlVuaW9uRmluZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6Zmlu
ZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6dW5pZnkpOgorCiAyMDExLTA5LTI3ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJhcGlkbHkgcmVm
cmVzaGluZyBhIGZlTW9ycGhvbG9neVtlcm9kZV0gd2l0aCByPTAgY2FuIHNvbWV0aW1lcyBjYXVz
ZSBkaXNwbGF5IGNvcnJ1cHRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwxMCBA
QAogCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBG
QzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5
RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9j
UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0
IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OworCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyog
Qml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkw
RjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFC
QjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIg
LyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjA0RThBMTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovOyB9Owor
CQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi87IH07CisJCTBGNjM2REEyMTQyRDI3RjAwMEIy
RTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFi
bGVQcmVkaWN0aW9uLmggKi87IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87
IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkw
MDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdz
ID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTY1
LDYgKzY3LDcgQEAKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZENTJBQUUxNDMwMzVBMDAw
MjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQx
NzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgKi87IH07CiAJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJF
NTQxNDFEQUVFRTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQ
cmVkaWN0ZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc5Myw4ICs3OTYsMTAgQEAKIAkJMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8q
IE93bkZhc3RNYWxsb2NQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3du
RmFzdE1hbGxvY1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkRGRkFENDBG
QzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8q
IEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJC
MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNjA0RThBMTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tl
ZEludFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRW
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MzZEQTExNDJEMjdFRDAw
QjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFjdGlvbmFibGVQcmVkaWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxp
bmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3
NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgx
MCw2ICs4MTUsNyBAQAogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZn
L0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMzE0MTE1
RDFBMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdQcm9wYWdhdG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4
MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHUHJvcGFnYXRvci5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlvbkZpbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBh
YmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVz
Lmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgxNCw3ICsxODIwLDkgQEAKIAkJNjUxNjJFRjEw
OEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAg
Ki8sCisJCQkJMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovLAorCQkJ
CTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLywKKwkJCQkw
RjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLywKIAkJCQkwRkQ4MkY0
OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8sCiAJCQkJQzIyQzUyNDgxM0ZBRjZF
RjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1h
YyAqLywKQEAgLTIzNDEsNiArMjM0OSw3IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAv
KiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8s
CiAJCQkJMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJ
CQkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovLAogCQkJ
CTBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi8sCkBAIC0yODI0
LDcgKzI4MzMsMTAgQEAKIAkJCQkxQTA4Mjc3QTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2Vt
YXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NTZCMDE0MjdGQjkxMDAzN0RBNjggLyog
QWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzNkRBMDE0
MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYgLyogVW5pb25GaW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTMxMzgsNiArMzE1MCw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
KwkJCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFs
dWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5
NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0OSw3ICszMzYyLDYg
QEAKIAkJCQkxQTA4Mjc3OTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9u
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8q
IEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjYwNEU4QjE0MkQ2OTZE
MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJs
ZVByZWRpY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBY3Rpb25hYmxlUHJl
ZGljdGlvbl9oCisjZGVmaW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKKworI2luY2x1ZGUgIkpT
QXJyYXkuaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9QYWNrZWRJbnRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIEFuIGFjdGlvbmFibGUgcHJlZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNlZCBvbiBz
dG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzCisvLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hlbiBwYXNz
aW5nIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQKKy8vIGlu
IENvZGVCbG9jay4KKworZW51bSBBY3Rpb25hYmxlUHJlZGljdGlvbiB7CisgICAgTm9BY3Rpb25h
YmxlUHJlZGljdGlvbiwKKyAgICBFbmZvcmNlSW50MzJQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VB
cnJheVByZWRpY3Rpb24sCisgICAgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCit9OworCitpbmxp
bmUgQWN0aW9uYWJsZVByZWRpY3Rpb24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVk
VHlwZShQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCit7CisgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGljdGlvbjsK
KyAgICAKKyAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJl
dHVybiBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5QcmVkaWN0
aW9uOworICAgIAorICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworfQorCitpbmxp
bmUgYm9vbCB2YWx1ZU9iZXlzUHJlZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpT
VmFsdWUgdmFsdWUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dp
dGNoIChwcmVkaWN0aW9uKSB7CisgICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAg
ICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVk
aWN0aW9uOgorICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKKwor
ICAgIGNhc2UgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gdmFsdWUu
aXNCb29sZWFuKCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVk
aWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3Ry
aW5nKEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVk
aWN0aW9uKSB7CisgICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1
cm4gIkVuZm9yY2VJbnQzMiI7CisgICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGlj
dGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQXJyYXkiOworICAgICAgICAKKyAgICBjYXNl
IEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQm9vbGVh
biI7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gIk5vQWN0aW9uYWJsZVBy
ZWRpY3Rpb24iOworICAgIH0KK30KKwordHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0aW9uYWJs
ZVByZWRpY3Rpb24sIDI+IEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yOworCitjbGFzcyBBY3Rp
b25hYmxlUHJlZGljdGlvbnMgeworcHVibGljOgorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucygp
IHsgfQorCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtVmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5zdXJl
U2l6ZShudW1Bcmd1bWVudHMpOworICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXplKG51bVZh
cmlhYmxlcyk7CisgICAgICAgIG1fYXJndW1lbnRzLmNsZWFyQWxsKCk7CisgICAgICAgIG1fdmFy
aWFibGVzLmNsZWFyQWxsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnQodW5z
aWduZWQgYXJndW1lbnQsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV9hcmd1bWVudHMuc2V0KGFyZ3VtZW50LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIGFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50ID49IG1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMu
Z2V0KGFyZ3VtZW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRWYXJpYWJsZSh1bnNpZ25l
ZCB2YXJpYWJsZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBt
X3ZhcmlhYmxlcy5zZXQodmFyaWFibGUsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9u
YWJsZVByZWRpY3Rpb24gdmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUpCisgICAgeworICAgICAg
ICBpZiAodmFyaWFibGUgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IE5vQWN0aW9uYWJsZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlcy5nZXQo
dmFyaWFibGUpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVyQm91bmQo
KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCB2YXJp
YWJsZVVwcGVyQm91bmQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAg
ICAKKyAgICB2b2lkIHBhY2soKQorICAgIHsKKyAgICAgICAgcGFja1ZlY3RvcihtX2FyZ3VtZW50
cyk7CisgICAgICAgIHBhY2tWZWN0b3IobV92YXJpYWJsZXMpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIHZvaWQgcGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlvblZlY3Rv
ciYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0gMDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKHZlY3Rvci5nZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAg
ICAgICAgICAgICAgICBsYXN0U2V0SW5kZXggPSBpOworICAgICAgICB9CisgICAgICAgIHZlY3Rv
ci5yZXNpemUobGFzdFNldEluZGV4ICsgMSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQ
cmVkaWN0aW9uVmVjdG9yIG1fYXJndW1lbnRzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVj
dG9yIG1fdmFyaWFibGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBB
Y3Rpb25hYmxlUHJlZGljdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDkgKzI0MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyByZXR1
cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4g
cmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVkaWN0
aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zOyB9
Ci0gICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KLQogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogCkBAIC05NzUsOCArOTcyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxQ
cmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsKLQogICAgICAgICBpbnQzMl90IG1fZXhl
Y3V0ZUNvdW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cjsKICAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJ
KHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3Rpb25UcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCw5IEBACiAKICNpbmNs
dWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9Ci0KIHN0cnVjdCBQcmVkaWN0aW9uU2xvdCB7CiBwdWJsaWM6CiAgICAgUHJlZGljdGlvblNs
b3QoKQpAQCAtNTAsNDYgKzQ2LDYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
UHJlZGljdGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJp
YWJsZXMpCi0gICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1f
dmFyaWFibGVzKG51bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5p
dGlhbGl6ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0gICAgewot
ICAgICAgICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0g
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tl
ciYgb3RoZXIpCi0gICAgewotICAgICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRz
OwotICAgICAgICBtX3ZhcmlhYmxlcyA9IG90aGVyLm1fdmFyaWFibGVzOwotICAgIH0KLSAgICAK
LSAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4
Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1l
bnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQotCi0gICAg
Ym9vbCBwcmVkaWN0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVu
dHNbYXJndW1lbnRdLm1fdmFsdWUsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBib29s
IHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVy
biBwcmVkaWN0QXJndW1lbnQoYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCksIHByZWRp
Y3Rpb24pOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZCA+PSAwKTsKLSAgICAgICAgICAgIG1f
dmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZSwg
cHJlZGljdGlvbik7Ci0gICAgfQotICAgIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNp
Z25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xv
YmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwpAQCAtMTAyLDIwICs1OCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgcHJl
ZGljdGlvbik7CiAgICAgfQogICAgIAotICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVk
aWN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2FyZ3VtZW50XS5tX3ZhbHVlOwotICAgIH0KLQotICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJl
ZGljdGlvbihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJn
dW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCkpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9w
ZXJhbmQgPCBtX3ZhcmlhYmxlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV92YXJpYWJs
ZXNbb3BlcmFuZF0ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIH0K
LSAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQg
dmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNs
b3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CkBA
IC0xMjUsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBWZWN0
b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3I8UHJlZGljdGlv
blNsb3QsIDE2PiBtX3ZhcmlhYmxlczsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9u
U2xvdD4gbV9nbG9iYWxWYXJzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzUGhpU3RhY2soKTsK
ICAgICAvLyBBZGQgc3BpbGwgbG9jYXRpb25zIHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVW
aXJ0dWFsUmVnaXN0ZXJzKCk7Ci0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpKTsKKyAgICAgICAgcmV0dXJuICZtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKKyAgICB9CisgICAgCiAgICAgLy8gR2V0
L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCiAgICAg
Tm9kZUluZGV4IGdldChpbnQgb3BlcmFuZCkKICAgICB7CkBAIC0xMTYsNyArMTI0LDcgQEAgcHJp
dmF0ZToKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUg
dGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwo
dW5zaWduZWQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFs
dWU7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0xMjksMTYgKzEzNywyMSBAQCBwcml2
YXRlOgogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlv
ciBibG9ja3MsCiAgICAgICAgIC8vIGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhl
c2UuCiAgICAgICAgIG1fcHJlc2VydmVkVmFycyA9IHN0ZDo6bWF4KG1fcHJlc2VydmVkVmFycywg
b3BlcmFuZCArIDEpOwotCi0gICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSk7
CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIE5v
ZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkp
OwogICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50
QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8ob3BlcmFuZCksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5t
X2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5v
ZGVJbmRleDsKKyAgICAgICAgCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVh
ZFtvcGVyYW5kXS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFu
ZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9j
YWxzW29wZXJhbmRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQp
LCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5k
XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRp
bmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50LgpAQCAt
MTQ3LDIwICsxNjAsMzUgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBv
cGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVu
dHMpOwogCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNbYXJndW1lbnRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZTsKIAogICAg
ICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNldEFyZ3Vt
ZW50KSB7CisgICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0
aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKKyAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9j
YWwgdG8gdGhlIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2Fs
KCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG5vZGUu
b3AgPT0gU2V0TG9jYWwpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogCi0gICAgICAgIE5vZGVJ
bmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRU
b0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3Vt
ZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJn
dW1lbnQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KG9wZXJhbmQpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJn
dW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBo
KEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRl
eDsKKyAgICAgICAgCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFth
cmd1bWVudF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIAogICAgICAgICByZXR1
cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBO
b2RlSW5kZXggdmFsdWUpCkBAIC0xNjgsNyArMTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3Vt
ZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3Vt
ZW50c1thcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3BlcmFu
ZCksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2Fy
Z3VtZW50XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJh
bmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgpAQCAt
Njg4LDYgKzcxNiwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIG1fY29uc3RhbnRzW2ldID0gQ29uc3RhbnRSZWNvcmQoKTsKICAgICB9
CisgICAgCisgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNl
IG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKKyAgICAvLyB1cyB0byB0cmFjayBp
ZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2Vk
LCBhcworICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4K
KyAgICBpZiAoIW1fY3VycmVudEluZGV4KSB7CisgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMu
cmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAg
IE5vZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOworICAgICAgICAgICAg
bV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1l
KHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0
VGFpbFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAgICAgfQorICAg
IH0KIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJw
cmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0xNDIxLDIwICsxNDYyLDM2IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIAogICAgICAgICBQcmVkZWNl
c3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwog
ICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwogCi0gICAgICAgICAg
ICBWYXJpYWJsZVJlY29yZCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/
IHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1lbnRzW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2st
Pm1fbG9jYWxzW3Zhck5vXTsKKyAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3Rh
Y2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFyTm9d
OwogCiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFyLnZhbHVl
OwogICAgICAgICAgICAgaWYgKHZhbHVlSW5QcmVkZWNlc3NvciA9PSBOb05vZGUpIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSk7Ci0gICAgICAg
ICAgICAgICAgdmFyLnZhbHVlID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gdmFyTm8gLSBtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IDogdmFyTm8pKSk7CisgICAgICAgICAgICAgICAgdmFyLnNldEZpcnN0VGltZSh2YWx1ZUluUHJl
ZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlT
dGFjaykKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNB
dEhlYWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9sb2Nh
bHNBdEhlYWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAg
ICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ss
IHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9n
cmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgfSBl
bHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vz
c0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBHZXRM
b2NhbCBhbmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBu
ZWVkIHRoZSB0d28KKyAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVm
ZmljaWVuY3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscworICAgICAg
ICAgICAgICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFz
IGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBtX2dyYXBoW21fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKV0udmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NF
UlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQ
cmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlm
eShkYXRhRm9yUGhpKTsKIAogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2Vu
dHJ5Lm1fcGhpXTsKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQpAQCAtMTQ1
Miw4ICsxNTA5LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPSB2YWx1ZUluUHJl
ZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIE5vZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZv
KGRhdGFGb3JQaGkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGhpTm9kZSA9ICZtX2dy
YXBoW2VudHJ5Lm1fcGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZlY3RvciByZXNpemUKICAgICAgICAg
ICAgIE5vZGUmIG5ld1BoaU5vZGUgPSBtX2dyYXBoW25ld1BoaV07CkBAIC0xNTIxLDYgKzE1Nzgs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgcHJvY2Vzc1BoaVN0YWNrPEFy
Z3VtZW50UGhpU3RhY2s+KCk7CiAgICAgCiAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBt
X3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwog
ICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGVudW0gQ29tcGlsZU1vZGUgeyBD
b21waWxlRnVuY3Rpb24sIENvbXAKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgR3JhcGggZGZnOwogICAgIGlm
ICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC00NywxNSArNDcsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVN
b2RlIGNvbXBpbGVNCiAgICAgCiAgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKTsKICAgICAKLSAgICAvLyBTYXZlIHRoZSBwcmVkaWN0aW9ucyB3ZSd2ZSBtYWRlLCBzbyB0
aGF0IE9TUiBlbnRyeSBjYW4gdmVyaWZ5IHRoZW0uIFByZWRpY3Rpb25zCi0gICAgLy8gYXJlIHNh
dmVkIGluIHRoZSBDb2RlQmxvY2sgZnJvbSB3aGljaCB3ZSB3aWxsIGJlIGRvaW5nIE9TUiBlbnRy
eSwgc2luY2UgdGhlCi0gICAgLy8gQ29kZUJsb2NrIHRvIHdoaWNoIHdlIGFyZSBPU1JpbmcgbWF5
IGJlIHJlcGxhY2VkIGF0IGFueSB0aW1lLgotICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4g
cHJlZGljdGlvbnMgPSBhZG9wdFB0cihuZXcgUHJlZGljdGlvblRyYWNrZXIoKSk7Ci0gICAgKnBy
ZWRpY3Rpb25zID0gZGZnLnByZWRpY3Rpb25zKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPnNldFByZWRpY3Rpb25zKHByZWRpY3Rpb25zLnJlbGVhc2UoKSk7Ci0gICAgCiAgICAg
SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwogICAg
IGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMzkgQEAgY29uc3QgY2hhciAq
R3JhcGg6Om9wTmFtZShOb2RlVHlwZSBvcCkKICAgICByZXR1cm4gZGZnT3BOYW1lc1tvcCAmIE5v
ZGVJZE1hc2tdOwogfQogCitjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NE
YXRhKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKQoreworICAgIC8vIFZh
cmlhYmxlcyBhcmUgYWxyZWFkeSBudW1iZXJlZC4gRm9yIHJlYWRhYmlsaXR5IG9mIElSIGR1bXBz
LCB0aGlzIHJldHVybnMKKyAgICAvLyBhbiBhbHBoYWJldGljIG5hbWUgZm9yIHRoZSB2YXJpYWJs
ZSBhY2Nlc3MgZGF0YSwgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0bworICAgIC8vIHJlYXNvbiBh
Ym91dCB0d28gbnVtYmVycyAodmFyaWFibGUgbnVtYmVyIGFuZCBsaXZlIHJhbmdlIG51bWJlciks
IGJ1dCBpbnN0ZWFkCisgICAgLy8gYSBudW1iZXIgYW5kIGEgbGV0dGVyLgorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoJm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldID09IHZhcmlhYmxlQWNj
ZXNzRGF0YSkgeworICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKGluZGV4ICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgCisgICAgaWYgKCFpbmRleCkKKyAgICAgICAg
cmV0dXJuICJBIjsKKworICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMF07CisgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXI8Y2hhcj4gcHRyKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIAorICAgIHdoaWxlIChp
bmRleCkgeworICAgICAgICAqcHRyKysgPSAnQScgKyAoaW5kZXggJSAyNik7CisgICAgICAgIGlu
ZGV4IC89IDI2OworICAgIH0KKyAgICAKKyAgICAqcHRyKysgPSAwOworICAgIAorICAgIHJldHVy
biBidWY7Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC0x
MTYsMTIgKzE0OSwxNCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
CiAgICAgICAgICAgICBwcmludGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5v
ZGUuaWRlbnRpZmllck51bWJlcigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAg
fQotICAgIGlmIChub2RlLmhhc0xvY2FsKCkpIHsKLSAgICAgICAgaW50IGxvY2FsID0gbm9kZS5s
b2NhbCgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQobG9jYWwpKQotICAgICAgICAg
ICAgcHJpbnRmKCIlc2FyZyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbG9jYWwgLSBjb2Rl
QmxvY2stPnRoaXNSZWdpc3RlcigpKTsKKyAgICBBU1NFUlQobm9kZS5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOworICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcHJpbnRmKCIlc2FyZyV1KCVzKSIsIGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsIG9wZXJhbmQgLSBjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLCBuYW1l
T2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBsb2Nh
bCk7CisgICAgICAgICAgICBwcmludGYoIiVzciV1KCVzKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIG9wZXJhbmQsIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEp
KTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmIChvcCA9PSBKU0Nv
bnN0YW50KSB7CkBAIC0xNDUsOCArMTgwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXgg
bm9kZUluZGV4LCBDbwogICAgIHByaW50ZigiKSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7Ci0g
ICAgICAgIGlmIChub2RlLmhhc0xvY2FsKCkpCi0gICAgICAgICAgICBwcmludGYoIiAgcHJlZGlj
dGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkp
KTsKKyAgICAgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAg
ICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5o
YXNWYXJOdW1iZXIoKSkKICAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwgcHJl
ZGljdGlvblRvU3RyaW5nKGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSkp
KTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5oYXNQcmVkaWN0aW9uKCkpCkBAIC0yMDQsMTAgKzIz
OSwxMCBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiB2b2lkIEdyYXBo
OjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIGlmIChleGVjKSB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fcHJlZGlj
dGlvbnMubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3Vt
ZW50cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJn
dW1lbnRzLnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBh
cmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpCi0gICAgICAgICAgICBtX3ByZWRpY3Rpb25z
LnByZWRpY3RBcmd1bWVudChhcmcsIHByZWRpY3Rpb25Gcm9tVmFsdWUoZXhlYy0+YXJndW1lbnQo
YXJnIC0gMSkpKTsKKyAgICAgICAgICAgIGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb25Gcm9tVmFsdWUoZXhlYy0+YXJndW1lbnQoYXJn
IC0gMSkpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC0yMjAsMTAg
KzI1NSwxMCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAgICAg
ICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAg
ICAgbV9wcmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKSk7CisgICAgICAgIGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmlu
dGYoIkFyZ3VtZW50IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRpY3Rpb25Ub1N0
cmluZyhtX3ByZWRpY3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7CisgICAgICAg
IHByaW50ZigiQXJndW1lbnQgWyVsdV0gcHJlZGljdGlvbjogJXNcbiIsIGFyZywgcHJlZGljdGlv
blRvU3RyaW5nKGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCkpKTsKICNlbmRpZgogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDk2MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIGNsYXNzIEV4ZWNT
dGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKKy8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5n
dWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCitpbmxpbmUgYm9vbCBvcGVy
YW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KKwogdHlw
ZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OwogCiAvLyBGb3IgZXZlcnkgbG9jYWwgdmFyaWFibGUg
d2UgdHJhY2sgYW55IGV4aXN0aW5nIGdldCBvciBzZXQgb2YgdGhlIHZhbHVlLgpAQCAtNTMsNiAr
NTYsMTIgQEAgc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKICAgICAgICAgOiB2YWx1ZShOb05vZGUp
CiAgICAgewogICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7CisgICAgICAg
IHZhbHVlID0gbm9kZUluZGV4OworICAgIH0KIAogICAgIE5vZGVJbmRleCB2YWx1ZTsKIH07CkBA
IC0xMTAsOCArMTE5LDEwIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICAgICAgLCBiZWdpbihi
ZWdpbikKICAgICAgICAgLCBlbmQoTm9Ob2RlKQogICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNl
KQotICAgICAgICAsIG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fs
cyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1lbnRzKQor
ICAgICAgICAsIG1fbG9jYWxzQXRIZWFkKG51bUxvY2FscykKKyAgICAgICAgLCBtX2FyZ3VtZW50
c0F0VGFpbChudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVtTG9jYWxz
KQogICAgIHsKICAgICB9CiAKQEAgLTEyNiw4ICsxMzcsMTIgQEAgc3RydWN0IEJhc2ljQmxvY2sg
ewogICAgIGJvb2wgaXNPU1JUYXJnZXQ7CiAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNl
c3NvcnM7Ci0gICAgVmVjdG9yIDxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHM7Ci0gICAg
VmVjdG9yIDxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzOworICAgIAorICAgIFZlY3RvcjxW
YXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdEhlYWQ7CisgICAgVmVjdG9yPFZhcmlhYmxl
UmVjb3JkLCAxNj4gbV9sb2NhbHNBdEhlYWQ7CisgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50c0F0VGFpbDsKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2
PiBtX2xvY2Fsc0F0VGFpbDsKIH07CiAKIC8vIApAQCAtMTM4LDExICsxNTMsNiBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayB7CiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0
b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0
PiB7CiBwdWJsaWM6Ci0gICAgR3JhcGgodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1WYXJpYWJsZXMpCi0gICAgICAgIDogbV9wcmVkaWN0aW9ucyhudW1Bcmd1bWVudHMsIG51bVZh
cmlhYmxlcykKLSAgICB7Ci0gICAgfQotCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVm
ZXJlbmNlZC4KICAgICB2b2lkIHJlZihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTE3
MSwxNiArMTgxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUJlZ2luKV07CiAgICAgfQogICAgIAotICAgIFBy
ZWRpY3Rpb25UcmFja2VyJiBwcmVkaWN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9uczsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0
aW9ucy5wcmVkaWN0KG9wZXJhbmQsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKICAgICBib29s
IHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24pCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5wcmVkaWN0R2xvYmFs
VmFyKHZhck51bWJlciwgcHJlZGljdGlvbik7CkBAIC0xOTAsMTEgKzE5MCwxMiBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbik7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2Fz
ZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2Rl
LnZhck51bWJlcigpLCBwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0TWV0aG9kOgogICAgICAgICBjYXNlIEdldEJ5
VmFsOgpAQCAtMjEyLDExICsyMTMsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRQcmVkaWN0aW9uKG9wZXJhbmQpOwotICAgIH0KLSAg
ICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFy
TnVtYmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih2YXJOdW1iZXIpOwpAQCAtMjQ0LDcgKzI0MCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9j
YWw6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihub2RlUHRyLT5sb2NhbCgpKTsK
KyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAg
ICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlUHRyLT52YXJOdW1iZXIoKSk7
CiAgICAgICAgIGNhc2UgR2V0QnlJZDoKQEAgLTMyNCw2ICszMjMsOSBAQCBwdWJsaWM6CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBPKG4pLCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdmVy
Ym9zZSBkdW1wcy4KKyAgICBjb25zdCBjaGFyKiBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFy
aWFibGVBY2Nlc3NEYXRhKik7CiAjZW5kaWYKIAogICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlw
ZXMoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CkBAIC0zMzMsNyArMzM1LDEwIEBAIHB1YmxpYzoK
ICAgICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKICAgICBWZWN0
b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJl
c29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOworICAgIFZlY3RvcjxOb2RlSW5k
ZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0Rh
dGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZh
cnM7CisgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJT
bG90czsKIHByaXZhdGU6CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDQwICszOTMsMjMg
QEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBPU1JFbnRyeURh
dGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2Nr
LmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkp
KTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBsYXN0TGl2ZUxvY2FsID0gMDsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCi0gICAgICAgICAgICAgICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3Vt
ZW50c0F0SGVhZC5zaXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0
SGVhZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJh
c2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgICAgICBpZiAobm9k
ZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMu
c2V0QXJndW1lbnQoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dy
YXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2xvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2su
bV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RMaXZlTG9j
YWwgPSBpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xv
Y2Fsc0F0SGVhZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgICAgICBpZiAo
bm9kZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlv
bnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZSht
X2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgewotICAg
ICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCAr
IDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZl
QXJndW1lbnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1l
bnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2
ZUFyZ3VtZW50cy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGxhc3RMaXZlTG9jYWwpIHsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJs
ZXMucmVzaXplKGxhc3RMaXZlTG9jYWwgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVW
YXJpYWJsZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAg
ICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwo
KTsKKyAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsKKyAgICAgICAgCisgICAg
ICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOwogI2Vsc2UK
ICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMg
bG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUg
ZGF0YWZsb3cgZ3JhcGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAt
MTA4LDYgKzEwOSw1MSBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsK
IH07CiAKK2NsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJs
ZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgICAg
ICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpKSkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsKQorICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgICwgbV9wcmVkaWN0aW9u
KFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7
CisgICAgICAgIHJldHVybiBtX2xvY2FsOworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7
CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRpY3Rpb24sIHBy
ZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2lu
Y2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCisgICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1l
IG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1dAorICAgIC8v
IHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBl
Y3QgREZHIHNwYWNlCisgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBi
ZSBzaWduaWZpY2FudC4KKworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOworICAgIFByZWRp
Y3RlZFR5cGUgbV9wcmVkaWN0aW9uOworfTsKKwogdHlwZWRlZiB1bnNpZ25lZCBBcml0aE5vZGVG
bGFnczsKICNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4MDAKICNkZWZpbmUgTm9kZVVzZWRB
c051bWJlciAgIDB4MDEKQEAgLTIyMyw2ICsyNjksOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNo
YXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKFBoaSwgMCkgXAogICAgIFwKKyAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50
cyBiZWluZyBzZXQuICovXAorICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCisgICAgXAogICAg
IC8qIE5vZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJpdEFuZCwg
Tm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oQml0T3IsIE5vZGVSZXN1bHRJbnQzMikgXApA
QCAtNDU3LDE1ICs1MDYsMzIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDb25z
dGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2spLmlzQm9vbGVhbigpOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNMb2NhbCgp
CiAgICAgewotICAgICAgICByZXR1cm4gb3AgPT0gR2V0TG9jYWwgfHwgb3AgPT0gU2V0TG9jYWw7
CisgICAgICAgIHJldHVybiBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICB9Ci0KKyAgICAK
KyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihtX29wSW5m
byktPmZpbmQoKTsKKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChoYXNMb2NhbCgpKTsKLSAgICAgICAgcmV0dXJuIChWaXJ0dWFs
UmVnaXN0ZXIpbV9vcEluZm87CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
bG9jYWwoKTsKICAgICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMjMgKzM1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1pbmxp
bmUgYm9vbCBwcmVkaWN0aW9uSXNWYWxpZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFs
dWUgdmFsdWUsIFByZWRpY3RlZFR5cGUgdHlwZSkKLXsKLSAgICAvLyB0aGlzIHRha2VzIGludG8g
YWNjb3VudCBvbmx5IGxvY2FsIHZhcmlhYmxlIHByZWRpY3Rpb25zIHRoYXQgZ2V0IGVuZm9yY2Vk
Ci0gICAgLy8gb24gU2V0TG9jYWwuCi0gICAgCi0gICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHR5
cGUpKQotICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotICAgIAotICAgIGlmIChpc0Fy
cmF5UHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRh
LCB2YWx1ZSk7Ci0gICAgCi0gICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odHlwZSkpCi0gICAg
ICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAjaWYgRU5BQkxFKERGR19PU1JfRU5U
UlkpCkBAIC02Niw3ICs0OSw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIEMKICNlbmRpZgogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2Nr
LT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAog
ICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgpOwpAQCAt
OTUsMjYgKzc3LDM0IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMK
ICAgICAvLyAgICBpbnRvIGEgbGVzcy1saWtlbHkgcGF0aC4gU28sIHRoZSB3aXNlc3QgY291cnNl
IG9mIGFjdGlvbiBpcyB0byBzaW1wbHkgbm90CiAgICAgLy8gICAgT1NSIGF0IHRoaXMgdGltZS4K
ICAgICAKLSAgICBQcmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMgPSBiYXNlbGluZUNvZGVC
bG9jay0+cHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICBpZiAocHJlZGljdGlvbnMtPm51bWJlck9m
QXJndW1lbnRzKCkgPiBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcHJlZGljdGlv
bnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5t
X2xpdmVBcmd1bWVudHMuc2l6ZSgpICYmIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuZ2V0KGkpCi0g
ICAgICAgICAgICAmJiAhcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1l
bnQoaSAtIDEpLCBwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVw
cGVyQm91bmQoKTsgKytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rp
b24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKKyAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsK
KyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NS
IGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IHdhcyBub3QgcGFzc2VkLCBleHBlY3RlZCAlcy5c
biIsIGksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworI2VuZGlm
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSks
IHByZWRpY3Rpb24pKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAg
IHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0
ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyAg
ICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAl
cywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24o
KSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5zaXplKCkgJiYgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxp
ZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25z
LT5nZXRQcmVkaWN0aW9uKGkpKSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRy
eS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZVVwcGVyQm91bmQoKTsgKytpKSB7CisgICAgICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJp
YWJsZShpKTsKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlv
bikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZU9i
ZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCks
IHByZWRpY3Rpb24pKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAg
IHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0
ZWQgJXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24o
KSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSk7Cisg
ICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMg
JXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRl
c2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwog
I2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5LDcgKzExOSw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBp
ZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KCZleGVjLT5y
ZWdpc3RlcnMoKVtjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC4uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICNlbmRpZgogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdPU1JF
bnRyeV9oCiAjZGVmaW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlICJBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzksOCArMzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEg
ewogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVD
b2RlT2Zmc2V0OwotICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1bWVudHM7Ci0gICAgQml0VmVjdG9y
IG1fbGl2ZVZhcmlhYmxlczsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9u
czsKIH07CiAKIGlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9T
UkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSwxNCAr
MzE5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEdldExvY2FsOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dy
YXBoLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGljdGlvbnNbbm9k
ZS5jaGlsZDEoKV0pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0KG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTU4LDE1ICs1NTgsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9l
c24ndCBkbyBhbnl0aGluZy4KLSAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBnZXRz
IGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgorICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NjE1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyAr
MTU1LDIwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICNpZm5k
ZWYgTkRFQlVHCiB2b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHsKLSAg
ICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgIHN3aXRjaCAoa2lu
ZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIGZwcmludGYob3V0LCAiTm90
U2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVyRmlsZToKKyAg
ICAgICAgZnByaW50ZihvdXQsICJJblJlZ0ZpbGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkludDMyIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmludGYob3V0LCAi
Tm9kZSglZCkiLCBtX25vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9p
ZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKQEAgLTIwMyw5ICsyMTYsOSBA
QCBPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
OwogICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRz
LnNpemUoKTsgKythcmd1bWVudCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0
LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kRm9yQXJndW1lbnQoYXJndW1lbnQpLCBq
aXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50
XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVu
dF0pOwogICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFi
bGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0g
aml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YXJpYWJsZSwgaml0LT5tX3ZhcmlhYmxlc1t2
YXJpYWJsZV0pOworICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKQEAgLTY5NSw3ICs3MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rp
b24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogCiAgICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRv
IGNvbXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CkBAIC03
NzAsNyArNzgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgICAgfHwgKCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAKLSAgICAg
ICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0
aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKGlz
SW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9j
YWwoKSkpOwpAQCAtNzkzLDkgKzgwNiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8g
bG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgLy8gdGhp
cyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4g
dGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoKTsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBj
YXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3A7IGl0IGp1c3QgbWFy
a3MgdGhlIGZhY3QgdGhhdCB0aGUgYXJndW1lbnQgaXMgYmVpbmcgdXNlZC4KKyAgICAgICAgLy8g
QnV0IGl0IG1heSBiZSBwcm9maXRhYmxlIHRvIHVzZSB0aGlzIGFzIGEgaG9vayB0byBydW4gc3Bl
Y3VsYXRpb24gY2hlY2tzCisgICAgICAgIC8vIG9uIGFyZ3VtZW50cywgdGhlcmVieSBhbGxvd2lu
ZyB1cyB0byB0cml2aWFsbHkgZWxpbWluYXRlIHN1Y2ggY2hlY2tzIGlmCisgICAgICAgIC8vIHRo
ZSBhcmd1bWVudCBpcyBub3QgdXNlZC4KKyAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJpdEFu
ZDoKICAgICBjYXNlIEJpdE9yOgpAQCAtMTM4Nyw4ICsxNDA3LDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhl
IGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgogICAgICAgICBO
b2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlm
IChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3Jh
cGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKGJhc2VO
b2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihiYXNlTm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSkgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVS
Qk9TRSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hlY2tBcnJheShAJXUpICAgIiwg
bm9kZS5jaGlsZDEoKSk7CisjZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CiAKICAgICAgICAgLy8gRklYTUU6IEluIGNhc2VzIHdoZXJlIHRoZXJl
IGFyZSBzdWJzZXF1ZW50IGJ5X3ZhbCBhY2Nlc3NlcyB0byB0aGUgc2FtZSBiYXNlIGl0IG1pZ2h0
IGhlbHAgdG8gY2FjaGUKQEAgLTE0MjIsOCArMTQ0NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBh
cnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBt
X3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNl
IHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAgICAgTm9kZSYg
YmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoYmFz
ZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKG1faml0LmdyYXBoKCku
Z2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSkpCisgICAgICAgIGlmIChiYXNlTm9kZS5v
cCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24oYmFzZU5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3Rpb24oKSkpIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0Up
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNrQXJyYXlAJXUgICAiLCBub2RlLmNo
aWxkMSgpKTsKKyNlbmRpZgogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAg
ICAgIHByb3BlcnR5LnVzZSgpOwpAQCAtMjEzMywxMCArMjE2MSwyNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2Vu
ZGlmCiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7
ICsraSkKLSAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdmFy
aWFibGVzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgp
ID09IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIGlmIChu
b2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
cmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW25v
ZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgfQorICAg
IAorICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2subV9sb2NhbHNBdEhlYWQu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2xvY2Fsc0F0SGVh
ZFtpXS52YWx1ZTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAg
ICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQ
cmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCkBAIC0yMjA3LDkgKzIyNDks
MTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogewogICAgIEFT
U0VSVCghbV9jb21waWxlSW5kZXgpOwogICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IDA7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJh
bWV0ZXJzOyArK2kpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IChWaXJ0dWFsUmVnaXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXIoKSArIGkp
OwotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdl
dFByZWRpY3Rpb24odmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKVttX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldXS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwog
ICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAt
MjIzMiwxMjEgKzIyODAsMTI5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1WYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCwgY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVlU291
cmNlKQorVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3IoY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlKQogewotICAgIGlmICghdmFsdWVTb3Vy
Y2UuaXNTZXQoKSkgewotICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4Rm9yT1NSICYmIGlzSW50
MzJQcmVkaWN0aW9uKG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihvcGVyYW5kKSkpCi0gICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJv
eGVkSW50MzIoKTsKKyAgICBzd2l0Y2ggKHZhbHVlU291cmNlLmtpbmQoKSkgeworICAgIGNhc2Ug
VmFsdWVJblJlZ2lzdGVyRmlsZToKICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVh
ZHlJblJlZ2lzdGVyRmlsZSgpOwotICAgIH0KLQotICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKSkKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7
CisgICAgICAgIAorICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7Cisg
ICAgICAgIAorICAgIGNhc2UgSGF2ZU5vZGU6IHsKKyAgICAgICAgaWYgKG1faml0LmlzQ29uc3Rh
bnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJ
bmRleCgpKSk7CisgICAgCisgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2
YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAgICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2Vu
ZXJhdGUoKSkgeworICAgICAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4s
IG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgICAg
IC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIg
dGhlIE9TUi4KKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIAotICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQu
Z3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07Ci0gICAgaWYgKCFub2RlUHRyLT5zaG91
bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGlu
LCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCi0gICAgICAgIC8v
IGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhl
IE9TUi4KLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVk
KCkpOwotICAgIH0KLSAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVy
YXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICBpZiAoIWluZm9QdHIt
PmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4
KCkpIHsKLSAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9k
ZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgIC8vIFRoZXJl
IGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFZhbHVlVG9O
dW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRv
TnVtYmVyIG5vZGUKLSAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5p
bmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQgYQotICAgICAgICAvLyAg
ICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0
ZSBWYWx1ZVRvTnVtYmVyLgotICAgICAgICAvLwotICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExp
a2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBp
cwotICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlm
IHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKLSAgICAgICAgLy8gICAgYW5kIGEgVmFsdWVU
b051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQK
LSAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmluZyB1c2VzIHdvdWxkIGhhdmUg
Y29udmVydGVkIHRvIG51bWJlciB3aGlsZQotICAgICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2
ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFVJbnQzMlRvTnVt
YmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9O
dW1iZXIKLSAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25l
cyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCi0gICAgICAgIC8vICAgIHJhdGhl
ciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhl
IHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJl
ciwgYnV0IGl0cwotICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhp
cyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCi0gICAgICAgIC8vICAgIHRo
ZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgewotICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOwotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2pp
dC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlv
bkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICAgICAgaWYgKGluZm9Q
dHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQotICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KCFmb3VuZCkgewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5v
Tm9kZTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdp
c3RlcikgewotICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2
ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
aW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUlu
ZGV4KCldOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlVG9OdW1iZXI6Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvRG91YmxlOgotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRl
eCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZv
W25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgaWYgKCFpbmZvUHRyLT5hbGl2
ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSB7
CisgICAgICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2Rl
IHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIFRo
ZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBp
cyBhIFZhbHVlVG9OdW1iZXIgbm9kZQorICAgICAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0
aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQg
YQorICAgICAgICAgICAgLy8gICAgVmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdheS4gVGh1
cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051bWJlci4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcg
bGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgLy8gICAgVmFsdWVUb0lu
dDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVUb0lu
dDMyCisgICAgICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRl
ciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAgICAgICAgICAgLy8gICAgbWVh
bnMgdGhhdCBzb21lIHJlbWFpbmluZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJl
ciB3aGlsZQorICAgICAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRv
IEludDMyLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJ
ZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIK
KyAgICAgICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMg
dGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgorICAgICAgICAgICAgLy8gICAgcmF0
aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUlu
dDMyVG9OdW1iZXIsIGJ1dCBpdHMKKyAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0
aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAg
ICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGlu
dGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7
CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgp
OworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwor
ICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0
dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYg
aW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFm
b3VuZCkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvTnVtYmVySW5kZXggPSBO
b05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9O
b2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9O
b2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFs
UmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsg
Kyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZvLm5vZGVJbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUlu
ZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVU
b051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvRG91YmxlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
VG9Vc2U7Ci0gICAgICAgICAgICBpZiAodmFsdWVUb051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAg
ICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9OdW1iZXJJbmRleDsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4OwotICAgICAgICAgICAgZWxz
ZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9k
ZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlckluZGV4OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVUb051bWJl
ckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZh
bHVlVG9JbnQzMkluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVp
bnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgewotICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07Ci0gICAgICAgICAgICAgICAgaW5mb1B0
ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgo
KSA9PSBub2RlSW5kZXhUb1VzZSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRvVXNlXTsKKyAgICAg
ICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1
YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZl
KCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgIH0KKyAg
ICAgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgCi0gICAgQVNTRVJU
KGluZm9QdHItPmFsaXZlKCkpOworICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CiAK
LSAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewot
ICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91Ymxl
KQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigp
KTsKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdwcigpLCBp
bmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKLSAgICB9Ci0gICAgaWYgKGluZm9QdHItPnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3Rl
ckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lz
dGVyRm9ybWF0KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1h
dCgpICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeSgpOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gOTYxNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI2ICs2Niw1MyBAQCBwcml2YXRlOgog
ICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKK2VudW0gVmFsdWVTb3VyY2VLaW5kIHsKKyAgICBTb3Vy
Y2VOb3RTZXQsCisgICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwKKyAgICBJbnQzMkluUmVnaXN0ZXJG
aWxlLAorICAgIEhhdmVOb2RlCit9OworCiBjbGFzcyBWYWx1ZVNvdXJjZSB7CiBwdWJsaWM6CiAg
ICAgVmFsdWVTb3VyY2UoKQotICAgICAgICA6IG1fbm9kZUluZGV4KE5vTm9kZSkKKyAgICAgICAg
OiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZChTb3VyY2VOb3RTZXQpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVl
U291cmNlS2luZCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1
ZVNvdXJjZUtpbmQpKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RT
ZXQpOworICAgICAgICBBU1NFUlQoa2luZCgpICE9IEhhdmVOb2RlKTsKICAgICB9CiAgICAgCiAg
ICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXgpCiAgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhh
dmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKElu
dDMySW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4ICE9IE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIGtp
bmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7CisgICAgfQorICAg
IAorICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCk7CiAgICAgfQogICAgIAogICAgIE5vZGVJ
bmRleCBub2RlSW5kZXgoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKICAgICAgICAgcmV0dXJuIG1fbm9k
ZUluZGV4OwogICAgIH0KICAgICAKQEAgLTk0LDYgKzEyMSwyMCBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICAKIHByaXZhdGU6CisgICAgc3RhdGljIE5vZGVJbmRleCBub2RlSW5kZXhGcm9tS2luZChW
YWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID49IFNvdXJj
ZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gTm9Ob2RlIC0ga2lu
ZDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlS2luZCBraW5kRnJvbU5vZGVJ
bmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQga2luZCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5kZXgpOworICAgICAgICBpZiAo
a2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIEhhdmVOb2RlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5k
PihraW5kKTsKKyAgICB9CisgICAgCiAgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwogfTsKICAg
ICAKQEAgLTU2OSw3ICs2MTAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIFRyYWNraW5nIGZv
ciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVu
dHMgYW5kIGJ5dGVjb2RlCiAgICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KLQorICAg
IAogICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCk7CkBAIC02MDIsMTEgKzY0MywxMSBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVy
YW5kOwogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKICAgICAKLSAgICBWYWx1
ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kLCBjb25zdCBWYWx1
ZVNvdXJjZSYpOworICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29u
c3QgVmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVj
b3ZlcnlGb3Iob3BlcmFuZCwgdmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICAg
ICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9yT3BlcmFuZChv
cGVyYW5kKSk7CiAgICAgfQogfTsKIApAQCAtODMxLDcgKzg3Miw3IEBAIGlubGluZSBTcGVjdWxh
dGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkKICAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0
cnVlKQogICAgICwgbV9jb21waWxlT2theSh0cnVlKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNv
ZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCi0gICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJs
b2NrKCktPm1fbnVtVmFycykKKyAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxW
YXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQogICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2Vk
SW50VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNr
ZWRJbnRWZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFja2VkSW50VmVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFja2VkSW50
VmVjdG9yX2gKKyNkZWZpbmUgUGFja2VkSW50VmVjdG9yX2gKKworI2luY2x1ZGUgIkJpdFZlY3Rv
ci5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBjbGFzcyBhbGxvd3MgeW91IHRvIGNy
ZWF0ZSBhbiBhcnJheSBvZiBpbnRlZ2Vycywgd2hlcmUgdGhvc2UKKy8vIGludGVnZXJzIGhhdmUg
b25seSBhIGhhbmRmdWwgb2YgYml0cyBlYWNoLiBJdCBpcyBub3QgbWVhbnQgdG8gYmUKKy8vIGVm
ZmljaWVudCBpbiB0aW1lLCBidXQgb25seSBpbiBzcGFjZS4gKFRob3VnaCBtYWtpbmcgaXQgZWZm
aWNpZW50CisvLyBpbiB0aW1lIGZvciBwb3dlci1vZi0yIHZhbHVlcyBvZiBiaXRDb3VudCB3b3Vs
ZCBub3QgYmUgZGlmZmljdWx0LikKKy8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgYXMg
ZXhwZWN0ZWQgZm9yIHNpZ25lZCB0eXBlcywgaWYgeW91CisvLyBhcmUgcmVseWluZyBvbiB0aGUg
c2lnbiBiZWluZyBwcmVzZXJ2ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGJp
dENvdW50PgorY2xhc3MgUGFja2VkSW50VmVjdG9yIHsKK3B1YmxpYzoKKyAgICBQYWNrZWRJbnRW
ZWN0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdENvdW50KTsKKyAgICAgICAgQVNTRVJU
KGJpdENvdW50IDwgc2l6ZW9mKHZvaWQqKSAqIDgpOworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJ
bnRWZWN0b3IoY29uc3QgUGFja2VkSW50VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHMo
b3RoZXIubV9iaXRzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yJiBv
cGVyYXRvcj0oY29uc3QgUGFja2VkSW50VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1f
Yml0cyA9IG90aGVyLm1fYml0czsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iaXRzLnNp
emUoKSAvIGJpdENvdW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90
IG51bUludHMpCisgICAgeworICAgICAgICBtX2JpdHMuZW5zdXJlU2l6ZShudW1JbnRzICogYml0
Q291bnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtSW50cykKKyAg
ICB7CisgICAgICAgIG1fYml0cy5yZXNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjbGVhckFsbCgpCisgICAgeworICAgICAgICBtX2JpdHMuY2xlYXJBbGwo
KTsKKyAgICB9CisgICAgCisgICAgVCBnZXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgdWludHB0cl90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5k
ZXggPSAwOyBzdWJJbmRleCA8IGJpdENvdW50OyArK3N1YkluZGV4KSB7CisgICAgICAgICAgICBy
ZXN1bHQgPDw9IDE7CisgICAgICAgICAgICByZXN1bHQgfD0gbV9iaXRzLmdldChpbmRleCAqIGJp
dENvdW50ICsgc3ViSW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgaW5kZXgsIFQg
dmFsdWUpCisgICAgeworICAgICAgICAvLyBEbyBhcml0aG1ldGljIHVzaW5nIHVpbnRwdHJfdCwg
YmVjYXVzZSAoMSkgd2Uga25vdyB3aGF0IGl0IGlzCisgICAgICAgIC8vIChUIG1pZ2h0IGJlIGFu
IGVudW0pIGFuZCAoMikgaXQncyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHR5cGUgdGhhdAorICAgICAg
ICAvLyBpcyBsaWtlbHkgdG8gcGVyZm9ybSBkZWNlbnRseSB3ZWxsLgorICAgICAgICB1aW50cHRy
X3QgbXlWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAgICAgICAKKyAg
ICAgICAgLy8gUHJlbGltaW5hcnkgc2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZhbHVlIGlzIG5vdCBv
dXQgb2YgcmFuZ2UuCisgICAgICAgIEFTU0VSVCgobXlWYWx1ZSAmIG1hc2soKSkgPT0gbXlWYWx1
ZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gYml0Q291bnQ7
IHN1YkluZGV4LS0gPiAwOykgeworICAgICAgICAgICAgbV9iaXRzLnNldChpbmRleCAqIGJpdENv
dW50ICsgc3ViSW5kZXgsICEhKG15VmFsdWUgJiAxKSk7CisgICAgICAgICAgICBteVZhbHVlID4+
PSAxOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbCBzYW5pdHkgY2hlY2sg
dGhhdCB3ZSBzdG9yZWQgd2hhdCB0aGUgdXNlciB0aG91Z2h0IHdlCisgICAgICAgIC8vIHN0b3Jl
ZC4KKyAgICAgICAgQVNTRVJUKGdldChpbmRleCkgPT0gdmFsdWUpOworICAgIH0KK3ByaXZhdGU6
CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBtYXNrLCBhbmQgaXMgY2FyZWZ1bCB0byBub3Qgc3Rl
cCBvbiB0aGUgd3JhcC1hcm91bmQKKyAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIHNoaWZ0IGFtb3Vu
dCAoMSA8PCAzMiBpcyAxIHNpbmNlIDMyIHdyYXBzIHRvIDApLiBUaGVyZQorICAgIC8vIGlzIHRo
ZSBzZXBhcmF0ZSBxdWVzdGlvbiBvZiB3aHkgeW91IHdvdWxkIGV2ZXIgdXNlIHRoaXMgdG8gc3Rv
cmUgMzItYml0CisgICAgLy8gb3IgNjQtYml0IHZhbHVlcywgYnV0IGl0J3MgcHJvYmFibHkgYmV0
dGVyIHRvIGhhdmUgdGhpcyB3b3JrIGFzIGV4cGVjdGVkCisgICAgLy8gaW4gc3VjaCBzaXR1YXRp
b25zIHJlZ2FyZGxlc3MuCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYXNrKCkgeyByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oMikgPDwgKGJpdENvdW50IC0gMSkpIC0gMTsgfQorICAgICAg
ICAgICAgICAgCisgICAgLy8gU3RvcmVzIGludGVnZXJzIGJpdCBieSBiaXQgaW4gYmlnIGVuZGlh
bi4KKyAgICBCaXRWZWN0b3IgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6UGFja2VkSW50VmVjdG9yOworCisjZW5kaWYgLy8gUGFja2VkSW50VmVjdG9yX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBVbmlvbkZpbmRfaAorI2RlZmluZSBVbmlvbkZpbmRfaAorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgVW5pb25GaW5k
IGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgZGlzam9pbnQgc2V0cyB1c2luZyB0aGUKKy8v
IGRpc2pvaW50LXNldCBmb3Jlc3QgZGF0YSBzdHJ1Y3R1cmUuIEVhY2ggVW5pb25GaW5kIGluc3Rh
bmNlIGlzIGEKKy8vIG5vZGUgaW4gdGhlIGZvcmVzdC4gVHlwaWNhbGx5IHlvdSB1c2UgaXQgYnkg
dXNpbmcgVW5pb25GaW5kIGFzIGEKKy8vIHN1cGVyY2xhc3M6CisvLworLy8gY2xhc3MgTWVtYmVy
T2ZTZXQ6IHB1YmxpYyBVbmlvbkZpbmQ8TWVtYmVyT2ZTZXQ+IHsgLi4uIH0KKy8vCisvLyBDYWxs
aW5nIHgtPmZpbmQoKSBnaXZlcyB5b3UgYSBNZW1iZXJPZlNldCogdGhhdCByZXByZXNlbnRzIHRo
ZQorLy8gZGlzam9pbnQgc2V0IHRoYXQgeCBiZWxvbmdzIHRvLiBDYWxsaW5nIHgtPnVuaWZ5KHkp
IHVuaWZpZXMgeCdzCisvLyBzZXQgd2l0aCB5J3Mgc2V0LCBhbmQgZW5zdXJlcyB0aGF0OgorLy8K
Ky8vIHgtPmZpbmQoKSA9PSB5LT5maW5kKCkKKy8vCisvLyBhbmQgdGhhdDoKKy8vCisvLyBhLT5m
aW5kKCkgPT0gYi0+ZmluZCgpCisvLworLy8gZm9yIGFueSBhLCBiIGlmIHByaW9yIHRvIHRoZSBj
YWxsIHRvIHgtPnVuaWZ5KHkpLCB3ZSB3b3VsZCBoYXZlCisvLyBoYWQ6CisvLworLy8gYS0+Zmlu
ZCgpID09IHgKKy8vIGItPmZpbmQoKSA9PSB5CisvLworLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBp
cyBhbG1vc3QgYW1vcnRpemVkIE8oMSksIGJ1dCBjb3VsZCBiZSB3b3JzZQorLy8gaW4gdW5saWtl
bHkgcGF0aG9sb2dpY2FsIGNhc2VzLiBJdCBmYXZvcnMgaGF2aW5nIGEgbm9uLXJlY3Vyc2l2ZQor
Ly8gc2luZ2xlIHBhc3MgaW1wbGVtZW50YXRpb24gb2YgdW5pZnkoKSBhbmQgZmluZCgpIG92ZXIg
ZW5zdXJpbmcgdGhlCisvLyB0aGVvcmV0aWNhbCBPKEludmVyc2VBY2tlcm1hbm5bbl0pIGFtb3J0
aXplZCBib3VuZCwgd2hpY2ggaXMgbXVjaAorLy8gY2xvc2VyIHRvIGFtb3J0aXplZCBPKDEpLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVW5pb25GaW5kIHsKK3B1YmxpYzoKKyAgICBV
bmlvbkZpbmQoKQorICAgICAgICA6IG1fcGFyZW50KDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBUKiBmaW5kKCkKKyAgICB7CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPih0
aGlzKTsKKyAgICAgICAgVCogbmV4dCA9IHJlc3VsdC0+bV9wYXJlbnQ7CisgICAgICAgIHdoaWxl
IChuZXh0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXh0OworICAgICAgICAgICAgbmV4dCA9
IHJlc3VsdC0+bV9wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gdGhpcykKKyAgICAgICAgICAgIG1fcGFyZW50ID0gcmVzdWx0
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHVuaWZ5KFQq
IG90aGVyKQorICAgIHsKKyAgICAgICAgVCogYSA9IHN0YXRpY19jYXN0PFQqPih0aGlzKS0+Zmlu
ZCgpOworICAgICAgICBUKiBiID0gb3RoZXItPmZpbmQoKTsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVCghYS0+bV9wYXJlbnQpOworICAgICAgICBBU1NFUlQoIWItPm1fcGFyZW50KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBhLT5tX3BhcmVudCA9IGI7CisgICAgfQorcHJpdmF0ZToKKyAgICBUKiBtX3BhcmVu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlVuaW9uRmluZDsKKwor
I2VuZGlmIC8vIFVuaW9uRmluZF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108960</attachid>
            <date>2011-09-27 21:43:21 -0700</date>
            <delta_ts>2011-09-27 22:05:15 -0700</delta_ts>
            <desc>the patch - attempt to fix windows, merge</desc>
            <filename>liverangesplit_patch_10.diff</filename>
            <type>text/plain</type>
            <size>86495</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBA
CisyMDExLTA5LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
QWN0aW9uYWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJl
ZGljdGlvbnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rp
b25zOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJn
dW1lbnRVcHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6
OnBhY2spOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1By
ZWRpY3Rpb25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJv
Y2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElz
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlUmVjb3JkOjpzZXRGaXJzdFRp
bWUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6UGFja2VkSW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRJbnRWZWN0b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6
Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmdldCk6CisgICAgICAg
IChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVj
dG9yOjptYXNrKToKKyAgICAgICAgKiB3dGYvVW5pb25GaW5kLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmlvbkZpbmQ6OlVuaW9uRmluZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6Zmlu
ZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6dW5pZnkpOgorCiAyMDExLTA5LTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBzaG91bGQgc3Bl
Y3VsYXRlIG1vcmUgYWdncmVzc2l2ZWx5IG9uIHJlYWRzIG9mIGFycmF5Lmxlbmd0aApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzAsNiArMTQzMCwxMCBAQAogCQkJTmFtZT0iYnl0ZWNvZGUiCiAJCQk+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQWN0aW9uYWJsZVBy
ZWRpY3Rpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtOTQxLDYgKzk0MSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYWNrZWRJbnRWZWN0b3IuaCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFnZUFsbG9jYXRpb24uaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBACiAJCTBC
REZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6
ZUxpbWl0cy5jcHAgKi87IH07CisJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
NkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3
MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRW
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJCTBGNjM2
REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsgfTsKKwkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZBIC8q
IEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRp
Y3Rpb24uaCAqLzsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJ
MEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIy
IC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJC
MTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09N
UElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtNjUsNiArNjcs
NyBAQAogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgx
Q0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAq
LzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYg
LyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3Rl
ZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzk3LDggKzgwMCwxMCBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFz
dE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFs
bG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVj
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZEludFZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEg
LyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE0LDYgKzgx
OSw3IEBACiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJp
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIzMTQxMTVEMUEwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
YWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGll
cy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0
aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODIyLDcgKzE4MjgsOSBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLywKKwkJ
CQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCisJCQkJMEY2MzZE
OUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAorCQkJCTBGMTZENzI0
MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5MTQyODA2
OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RD
MEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLApA
QCAtMjM1Myw2ICsyMzYxLDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVj
b2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYz
NkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkw
RkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4MzYsNyArMjg0
NSwxMCBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBBbGxvY2F0
aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEwMTQyRDI3RDcw
MEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEy
MTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMzE1MSw2ICszMTYzLDcgQEAKIAkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAorCQkJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRD
b2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZG
MTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzYyLDcg
KzMzNzUsNiBAQAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhv
cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjA0RThC
MTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4
ODBGMUMxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGls
ZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIg
LyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlv
bmFibGVQcmVkaWN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWN0aW9uYWJs
ZVByZWRpY3Rpb25faAorI2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisKKyNpbmNsdWRl
ICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFja2VkSW50VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBBbiBhY3Rpb25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQg
b24gc3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcworLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4g
cGFzc2luZyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCisv
LyBpbiBDb2RlQmxvY2suCisKK2VudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24geworICAgIE5vQWN0
aW9uYWJsZVByZWRpY3Rpb24sCisgICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKKyAgICBFbmZv
cmNlQXJyYXlQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgorfTsKKwor
aW5saW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRp
Y3RlZFR5cGUoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rp
b247CisgICAgCisgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICByZXR1cm4gRW5mb3JjZUFycmF5UHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJl
ZGljdGlvbjsKKyAgICAKKyAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKK30KKwor
aW5saW5lIGJvb2wgdmFsdWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHZhbHVlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAg
IHN3aXRjaCAocHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKworICAgIGNhc2UgRW5mb3JjZUFycmF5
UHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7
CisKKyAgICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmlzQm9vbGVhbigpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQo
cHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitpbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25U
b1N0cmluZyhBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAo
cHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAg
cmV0dXJuICJFbmZvcmNlSW50MzIiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VBcnJheVBy
ZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKKyAgICAgICAgCisgICAg
Y2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUJv
b2xlYW4iOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlv
biA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uIjsKKyAgICB9Cit9CisKK3R5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlv
bmFibGVQcmVkaWN0aW9uLCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKKworY2xhc3Mg
QWN0aW9uYWJsZVByZWRpY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
bnMoKSB7IH0KKworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmVu
c3VyZVNpemUobnVtQXJndW1lbnRzKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShu
dW1WYXJpYWJsZXMpOworICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOworICAgICAgICBt
X3ZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50
KHVuc2lnbmVkIGFyZ3VtZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLnNldChhcmd1bWVudCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7
CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzLmdldChhcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VmFyaWFibGUodW5z
aWduZWQgdmFyaWFibGUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV92YXJpYWJsZXMuc2V0KHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcmlhYmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMu
Z2V0KHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
dmFyaWFibGVVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9
CisgICAgCisgICAgdm9pZCBwYWNrKCkKKyAgICB7CisgICAgICAgIHBhY2tWZWN0b3IobV9hcmd1
bWVudHMpOworICAgICAgICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25W
ZWN0b3ImIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24p
CisgICAgICAgICAgICAgICAgbGFzdFNldEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICB2
ZWN0b3IucmVzaXplKGxhc3RTZXRJbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25h
YmxlUHJlZGljdGlvblZlY3RvciBtX2FyZ3VtZW50czsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
blZlY3RvciBtX3ZhcmlhYmxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQWN0aW9uYWJsZVByZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw5ICsyNDAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsg
cmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc093blB0cjxDb2RlQmxv
Y2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgp
OyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFByZWRpY3Rpb25zKFBhc3NPd25QdHI8UHJl
ZGljdGlvblRyYWNrZXI+IHByZWRpY3Rpb25zKSB7IG1fcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
czsgfQotICAgICAgICBQcmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRpY3Rpb25zLmdldCgpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKTsKIApAQCAtOTc1LDggKzk3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAgIAotICAgICAgICBPd25Q
dHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7Ci0KICAgICAgICAgaW50MzJfdCBt
X2V4ZWN1dGVDb3VudGVyOwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tl
ci5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0aW9uVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsOSBAQAogCiAj
aW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gaGVscGVyIGZ1bmN0
aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlu
bGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5k
IDwgMDsgfQotCiBzdHJ1Y3QgUHJlZGljdGlvblNsb3QgewogcHVibGljOgogICAgIFByZWRpY3Rp
b25TbG90KCkKQEAgLTUwLDQ2ICs0Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIFByZWRpY3Rpb25UcmFja2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VmFyaWFibGVzKQotICAgICAgICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAg
LCBtX3ZhcmlhYmxlcyhudW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lk
IGluaXRpYWxpemVTaW1pbGFyVG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQotICAg
IHsKLSAgICAgICAgbV9hcmd1bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29weUxvY2Fsc0Zyb20oY29uc3QgUHJlZGljdGlvblRy
YWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMgPSBvdGhlci5tX2FyZ3Vt
ZW50czsKLSAgICAgICAgbV92YXJpYWJsZXMgPSBvdGhlci5tX3ZhcmlhYmxlczsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KLQot
ICAgIGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fYXJn
dW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAg
ewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpLCBw
cmVkaWN0aW9uKTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVz
LnNpemUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPj0gMCk7Ci0gICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVzW29wZXJhbmRdLm1fdmFs
dWUsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKICAgICBib29sIHByZWRpY3RHbG9iYWxWYXIo
dW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAgLTEwMiwyMCArNTgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUs
IHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIGdldEFyZ3VtZW50
UHJlZGljdGlvbih1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1thcmd1bWVudF0ubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBQcmVkaWN0ZWRUeXBlIGdl
dFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRQcmVkaWN0aW9u
KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpKTsKLSAgICAgICAgaWYgKCh1bnNpZ25l
ZClvcGVyYW5kIDwgbV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAg
ICB9Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2ln
bmVkIHZhck51bWJlcikKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rp
b25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEp
OwpAQCAtMTI1LDggKzY3LDYgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
VmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yPFByZWRp
Y3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGlj
dGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw3ICs4MywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc1BoaVN0YWNr
KCk7CiAgICAgLy8gQWRkIHNwaWxsIGxvY2F0aW9ucyB0byBub2Rlcy4KICAgICB2b2lkIGFsbG9j
YXRlVmlydHVhbFJlZ2lzdGVycygpOwotCisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBBU1NFUlQo
b3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiAm
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorICAgIAogICAgIC8v
IEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgog
ICAgIE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTE2LDcgKzEyNCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdo
ZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExv
Y2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlOwogCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTI5LDE2ICsxMzcsMjEgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20g
cHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRvIGNvdmVy
IHRoZXNlLgogICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1heChtX3ByZXNlcnZlZFZh
cnMsIG9wZXJhbmQgKyAxKTsKLQotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQ
aGkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIAorICAgICAg
ICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3Vy
cmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRl
eCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNB
dEhlYWRbb3BlcmFuZF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIAogICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9w
ZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5t
X2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3Bl
cmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVt
ZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4K
QEAgLTE0NywyMCArMTYwLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJn
dW1lbnRzKTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CiAK
ICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQg
aW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCisgICAgICAgICAgICAgICAgLy8gdGhlIEdl
dExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5s
b2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4Owor
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChu
b2RlLm9wID09IFNldExvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAgICAgICBO
b2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRz
W2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2Rl
SW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhl
YWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFu
ZCwgTm9kZUluZGV4IHZhbHVlKQpAQCAtMTY4LDcgKzE5Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBv
cGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4K
QEAgLTY4OCw2ICs3MTYsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7CiAg
ICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJv
ZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCisgICAgLy8gdXMgdG8gdHJh
Y2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBh
c3NlZCwgYXMKKyAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0
bHkuCisgICAgaWYgKCFtX2N1cnJlbnRJbmRleCkgeworICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0
VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgIH0K
KyAgICB9CiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTQyMSwyMCArMTQ2MiwzNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAKICAgICAgICAgUHJl
ZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29y
czsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOworICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAg
ICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c1t2YXJOb10gOiBwcmVkZWNlc3NvckJs
b2NrLT5tX2xvY2Fsc1t2YXJOb107CisgICAgICAgICAgICBWYXJpYWJsZVJlY29yZCYgdmFyID0g
KHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRUYWlsW3Zh
ck5vXTsKIAogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52
YWx1ZTsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGkpOwotICAg
ICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSA6IHZhck5vKSkpOworICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJ
blByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1l
bnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1f
bG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKICAg
ICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJs
b2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgLy8g
R2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9u
bHkgbmVlZCB0aGUgdHdvCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZv
ciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NE
YXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBt
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3Rh
Y2spKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRh
Rm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+
dW5pZnkoZGF0YUZvclBoaSk7CiAKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFw
aFtlbnRyeS5tX3BoaV07CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKQEAg
LTE0NTIsOCArMTUwOSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGksIE9w
SW5mbyhkYXRhRm9yUGhpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBoaU5vZGUgPSAm
bV9ncmFwaFtlbnRyeS5tX3BoaV07IC8vIHJlbG9hZCBhZnRlciB2ZWN0b3IgcmVzaXplCiAgICAg
ICAgICAgICBOb2RlJiBuZXdQaGlOb2RlID0gbV9ncmFwaFtuZXdQaGldOwpAQCAtMTUyMSw2ICsx
NTc4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHByb2Nlc3NQaGlTdGFj
azxBcmd1bWVudFBoaVN0YWNrPigpOwogICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
ID0gbV9wcmVzZXJ2ZWRWYXJzOworICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2Fs
czsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogCiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBlbnVtIENvbXBpbGVNb2Rl
IHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21wCiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEdyYXBoIGRmZyhjb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIEdyYXBoIGRmZzsKICAg
ICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIApAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwg
c28gdGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAgIC8vIGFy
ZSBzYXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1Ig
ZW50cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5n
IG1heSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlvblRyYWNr
ZXI+IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkpOwotICAg
ICpwcmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotICAgIAog
ICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsK
ICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VS
VChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM5IEBAIGNvbnN0IGNo
YXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3Ag
JiBOb2RlSWRNYXNrXTsKIH0KIAorY29uc3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlhYmxlQWNj
ZXNzRGF0YShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKK3sKKyAgICAv
LyBWYXJpYWJsZXMgYXJlIGFscmVhZHkgbnVtYmVyZWQuIEZvciByZWFkYWJpbGl0eSBvZiBJUiBk
dW1wcywgdGhpcyByZXR1cm5zCisgICAgLy8gYW4gYWxwaGFiZXRpYyBuYW1lIGZvciB0aGUgdmFy
aWFibGUgYWNjZXNzIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KKyAgICAvLyByZWFz
b24gYWJvdXQgdHdvIG51bWJlcnMgKHZhcmlhYmxlIG51bWJlciBhbmQgbGl2ZSByYW5nZSBudW1i
ZXIpLCBidXQgaW5zdGVhZAorICAgIC8vIGEgbnVtYmVyIGFuZCBhIGxldHRlci4KKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCZtX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChpbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIGlmICghaW5kZXgpCisgICAg
ICAgIHJldHVybiAiQSI7CisKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIEJvdW5kc0No
ZWNrZWRQb2ludGVyPGNoYXI+IHB0cihidWYsIHNpemVvZihidWYpKTsKKyAgICAKKyAgICB3aGls
ZSAoaW5kZXgpIHsKKyAgICAgICAgKnB0cisrID0gJ0EnICsgKGluZGV4ICUgMjYpOworICAgICAg
ICBpbmRleCAvPSAyNjsKKyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICBy
ZXR1cm4gYnVmOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpA
QCAtMTE2LDEyICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4
LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIi
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgIGludCBsb2NhbCA9IG5v
ZGUubG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSkKLSAgICAg
ICAgICAgIHByaW50ZigiJXNhcmcldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsIC0g
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcykiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwg
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwcmludGYoIiVzciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bG9jYWwpOworICAgICAgICAgICAgcHJpbnRmKCIlc3IldSglcykiLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBvcGVyYW5kLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAob3AgPT0g
SlNDb25zdGFudCkgewpAQCAtMTQ1LDggKzE4MCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBwcmludGYoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkg
ewotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQotICAgICAgICAgICAgcHJpbnRmKCIgIHBy
ZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAg
ICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcobm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5v
ZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIs
IHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzUHJlZGljdGlvbigpKQpAQCAtMjA0LDEw
ICsyMzksMTAgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQogdm9pZCBH
cmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBpZiAoZXhlYykgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1
bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX3By
ZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZB
cmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBt
X2FyZ3VtZW50cy5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgYXJnID0g
MTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKQotICAgICAgICAgICAgbV9wcmVkaWN0
aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3Vt
ZW50KGFyZyAtIDEpKSk7CisgICAgICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3VtZW50
KGFyZyAtIDEpKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2spOwpAQCAtMjIw
LDEwICsyNTUsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YQog
ICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKSk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
cHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9wcmVkaWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOworICAg
ICAgICBwcmludGYoIkFyZ3VtZW50IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRp
Y3Rpb25Ub1N0cmluZyhhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlz
dGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wg
b3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisK
IHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIAogLy8gRm9yIGV2ZXJ5IGxvY2FsIHZhcmlh
YmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KQEAgLTUz
LDYgKzU2LDEyIEBAIHN0cnVjdCBWYXJpYWJsZVJlY29yZCB7CiAgICAgICAgIDogdmFsdWUoTm9O
b2RlKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA9PSBOb05vZGUpOworICAg
ICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggdmFsdWU7CiB9
OwpAQCAtMTEwLDggKzExOSwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAgICwgYmVn
aW4oYmVnaW4pCiAgICAgICAgICwgZW5kKE5vTm9kZSkKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9s
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50
cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChudW1Mb2NhbHMpCisgICAgICAgICwgbV9hcmd1
bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxv
Y2FscykKICAgICB7CiAgICAgfQogCkBAIC0xMjYsOCArMTM3LDEyIEBAIHN0cnVjdCBCYXNpY0Js
b2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJl
ZGVjZXNzb3JzOwotICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzOwot
ICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2FsczsKKyAgICAKKyAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOworICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOworICAgIAorICAgIFZlY3RvcjxWYXJpYWJs
ZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7CisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3Jk
LCAxNj4gbV9sb2NhbHNBdFRhaWw7CiB9OwogCiAvLyAKQEAgLTEzOCwxMSArMTUzLDYgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUg
dmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2Rl
LCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJndW1lbnRzLCBu
dW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLQogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC0xNzEsMTYgKzE4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KICAgICAKLSAg
ICBQcmVkaWN0aW9uVHJhY2tlciYgcHJlZGljdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcHJlZGljdGlvbnM7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFu
ZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJl
ZGljdGlvbnMucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCiAgICAg
Ym9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdEds
b2JhbFZhcih2YXJOdW1iZXIsIHByZWRpY3Rpb24pOwpAQCAtMTkwLDExICsxOTAsMTIgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rp
b24pOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
IGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJu
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIo
bm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKQEAgLTIxMiwxMSArMjEzLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbihvcGVyYW5kKTsKLSAgICB9
Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2lnbmVk
IHZhck51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLmdldEdsb2Jh
bFZhclByZWRpY3Rpb24odmFyTnVtYmVyKTsKQEAgLTI0NCw3ICsyNDAsMTAgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+bG9jYWwo
KSk7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAg
ICAgICAgICAgcmV0dXJuIGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFyTnVtYmVy
KCkpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CkBAIC0zMjQsNiArMzIzLDkgQEAgcHVibGljOgog
CiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUp
OworICAgIAorICAgIC8vIFRoaXMgaXMgTyhuKSwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHZlcmJvc2UgZHVtcHMuCisgICAgY29uc3QgY2hhciogbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRh
KFZhcmlhYmxlQWNjZXNzRGF0YSopOwogI2VuZGlmCiAKICAgICB2b2lkIHByZWRpY3RBcmd1bWVu
dFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMzMzLDcgKzMzNSwxMCBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4gbV9tZXRob2RDaGVja0RhdGE7CiAgICAg
VmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3Rv
cjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKKyAgICBWZWN0b3I8Tm9k
ZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKKyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nl
c3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgdW5zaWduZWQgbV9wcmVzZXJ2
ZWRWYXJzOworICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7CiBwcml2YXRlOgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw0MCArMzkz
LDIzIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50
cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNC
bG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJl
bCgpKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUFyZ3VtZW50ID0gMDsK
LSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVu
dHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rp
b25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChiYXNpY0Js
b2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2
ZUxvY2FsID0gaTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2su
bV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5
cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsK
LSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1l
bnQgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0
TGl2ZUFyZ3VtZW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2Fy
Z3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xpdmVBcmd1bWVudHMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChsYXN0TGl2ZUxvY2FsKSB7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFy
aWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxvY2FsICsgMSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9s
aXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVMb2NhbDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNldChpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFy
QWxsKCk7CisgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5wYWNrKCk7CisgICAgICAgIAor
ICAgICAgICBlbnRyeS0+bV9wcmVkaWN0aW9ucyA9IGFjdGlvbmFibGVQcmVkaWN0aW9uczsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNpY0Jsb2NrKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KIAogLy8gRW1pdCB2YXJp
b3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcg
dGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAK
QEAgLTEwOCw2ICsxMDksNTEgQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5k
ZXg7CiB9OwogCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFy
aWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAg
ICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25l
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJlZGlj
dGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9j
YWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJh
bmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisg
ICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9u
LCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQs
IHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUg
c2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAg
ICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3Qg
ZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMg
ZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKIHR5cGVkZWYgdW5zaWduZWQgQXJpdGhO
b2RlRmxhZ3M7CiAjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwCiAjZGVmaW5lIE5vZGVV
c2VkQXNOdW1iZXIgICAweDAxCkBAIC0yMjMsNiArMjY5LDkgQEAgc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKICAgICBcCisgICAgLyogTWFya2VyIGZvciBhcmd1
bWVudHMgYmVpbmcgc2V0LiAqL1wKKyAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAorICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRB
bmQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdE9yLCBOb2RlUmVzdWx0SW50MzIp
IFwKQEAgLTQ1NiwxNSArNTA1LDMyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrKS5pc0Jvb2xlYW4o
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBj
YXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzTG9j
YWwoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IEdldExvY2FsIHx8IG9wID09IFNldExv
Y2FsOworICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgfQotCisg
ICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9v
cEluZm8pLT5maW5kKCk7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgp
CiAgICAgewotICAgICAgICBBU1NFUlQoaGFzTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiAoVmly
dHVhbFJlZ2lzdGVyKW1fb3BJbmZvOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPmxvY2FsKCk7CiAgICAgfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDIzICszNSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
aW5saW5lIGJvb2wgcHJlZGljdGlvbklzVmFsaWQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHR5cGUpCi17Ci0gICAgLy8gdGhpcyB0YWtlcyBp
bnRvIGFjY291bnQgb25seSBsb2NhbCB2YXJpYWJsZSBwcmVkaWN0aW9ucyB0aGF0IGdldCBlbmZv
cmNlZAotICAgIC8vIG9uIFNldExvY2FsLgotICAgIAotICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLSAgICAKLSAgICBpZiAo
aXNBcnJheVByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFs
RGF0YSwgdmFsdWUpOwotICAgIAotICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHR5cGUpKQot
ICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogI2lmIEVOQUJMRShERkdfT1NS
X0VOVFJZKQpAQCAtNjYsNyArNDksNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAjZW5kaWYKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVC
bG9jay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsK
QEAgLTk1LDI2ICs3NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNv
dXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRp
bWUuCiAgICAgCi0gICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zID0gYmFzZWxpbmVD
b2RlQmxvY2stPnByZWRpY3Rpb25zKCk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3Rpb25zLT5udW1i
ZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChp
KQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFy
Z3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1l
bnRVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVk
aWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnQoaSk7CisgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAoaSA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAt
IDEpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIHBy
ZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSk7
CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUg
aXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0
aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9mVmFyaWFibGVzKCk7ICsr
aSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCi0gICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGVVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMu
dmFyaWFibGUoaSk7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRp
Y3Rpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
dWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1
ZSgpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0
aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkp
OworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1
IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUo
KS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24p
KTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEyOSw3ICsx
MTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAg
ICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdygmZXhl
Yy0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBi
ZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuLlxuIik7CisgICAgICAgIHByaW50ZigiICAgIE9T
UiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgREZH
T1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlIDx3dGYvQml0VmVj
dG9yLmg+CisjaW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTM5LDggKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlE
YXRhIHsKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNo
aW5lQ29kZU9mZnNldDsKLSAgICBCaXRWZWN0b3IgbV9saXZlQXJndW1lbnRzOwotICAgIEJpdFZl
Y3RvciBtX2xpdmVWYXJpYWJsZXM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIG1fcHJlZGlj
dGlvbnM7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRl
eChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTks
MTQgKzMxOSwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdChtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTU1OSwxNSArNTU5LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZl
cmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0
IGRvZXNuJ3QgZG8gYW55dGhpbmcuCi0gICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERp
cmVjdDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIFRoaXMg
Z2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2Fz
ZSBQaGFudG9tOgorICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1
LDcgKzE1NSwyMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAj
aWZuZGVmIE5ERUJVRwogdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB7
Ci0gICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKKyAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ik5vdFNldCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6
CisgICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICJJbnQzMiIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhhdmVOb2RlOgorICAgICAgICBmcHJpbnRmKG91
dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAK
IHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CkBAIC0yMDMsOSArMjE2
LDkgQEAgT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaAogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9
IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZEZvckFyZ3VtZW50KGFyZ3VtZW50
KSwgaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAgICAgICBtX2FyZ3VtZW50c1thcmd1
bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJn
dW1lbnRdKTsKICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3Zh
cmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCi0gICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxl
XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFyaWFibGUsIGppdC0+bV92YXJpYWJs
ZXNbdmFyaWFibGVdKTsKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkBAIC02OTUsNyArNzA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
LSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVk
aWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKIAogICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1w
dCB0byBjb21waWxlLgogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewpA
QCAtNzcwLDcgKzc4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgIHx8ICghbV9ieXRlY29kZUluZGV4Rm9yT1NSICYmICFuZXh0Tm9k
ZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICBtX2J5dGVjb2RlSW5kZXhG
b3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgCi0g
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJl
ZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2Rl
LmxvY2FsKCkpKTsKQEAgLTc5Myw5ICs4MDYsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdz
IG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCiAgICAgICAgIC8v
IHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25z
IGluIHRoZSByZWdpc3RlciBmaWxlLgotICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CisgICAgICAgIHZhbHVlU291cmNl
UmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2U6OmZvclByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wOyBpdCBqdXN0
IG1hcmtzIHRoZSBmYWN0IHRoYXQgdGhlIGFyZ3VtZW50IGlzIGJlaW5nIHVzZWQuCisgICAgICAg
IC8vIEJ1dCBpdCBtYXkgYmUgcHJvZml0YWJsZSB0byB1c2UgdGhpcyBhcyBhIGhvb2sgdG8gcnVu
IHNwZWN1bGF0aW9uIGNoZWNrcworICAgICAgICAvLyBvbiBhcmd1bWVudHMsIHRoZXJlYnkgYWxs
b3dpbmcgdXMgdG8gdHJpdmlhbGx5IGVsaW1pbmF0ZSBzdWNoIGNoZWNrcyBpZgorICAgICAgICAv
LyB0aGUgYXJndW1lbnQgaXMgbm90IHVzZWQuCisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBC
aXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKQEAgLTEzODcsOCArMTQwNywxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3Zl
Y3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAg
ICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwotICAgICAg
ICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKG1faml0
LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSkpCisgICAgICAgIGlmIChi
YXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24oYmFzZU5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNrQXJyYXkoQCV1KSAg
ICIsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlmCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJbiBjYXNlcyB3aGVyZSB0
aGVyZSBhcmUgc3Vic2VxdWVudCBieV92YWwgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYmFzZSBpdCBt
aWdodCBoZWxwIHRvIGNhY2hlCkBAIC0xNDIyLDggKzE0NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3Ig
KDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUg
YmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIE5v
ZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYg
KGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFw
aCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBpZiAoYmFzZU5v
ZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKGJhc2VOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKSB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJC
T1NFKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaGVja0FycmF5QCV1ICAgIiwgbm9k
ZS5jaGlsZDEoKSk7CisjZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIH0KIAogICAgICAgICBiYXNlLnVzZSgpOwog
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKQEAgLTIxNTMsMTAgKzIxODEsMjQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIG1faml0LmJyZWFrcG9pbnQoKTsK
ICNlbmRpZgogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKQotICAgICAgICBt
X3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNp
emUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBp
ZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFs
dWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRI
ZWFkLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9sb2NhbHNB
dEhlYWRbaV0udmFsdWU7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6
Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgIG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIApAQCAtMjIyNyw5ICsy
MjY5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKIHsKICAg
ICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSAw
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxl
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKQor
ICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUp
OworICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1fbnVt
UGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCkg
KyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgo
KS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKClbbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tp
XV0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsK
QEAgLTIyNTIsMTIxICsyMzAwLDEyOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29t
cHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQsIGNvbnN0IFZhbHVlU291cmNlJiB2YWx1
ZVNvdXJjZSkKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKIHsKLSAgICBpZiAoIXZhbHVl
U291cmNlLmlzU2V0KCkpIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiBp
c0ludDMyUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24ob3BlcmFuZCkpKQot
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFz
VW5ib3hlZEludDMyKCk7CisgICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKKyAgICBj
YXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojph
bHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9qaXQuaXNDb25zdGFu
dCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgo
KSkpOworICAgICAgICAKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigp
OworICAgICAgICAKKyAgICBjYXNlIEhhdmVOb2RlOiB7CisgICAgICAgIGlmIChtX2ppdC5pc0Nv
bnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5u
b2RlSW5kZXgoKSkpOworICAgIAorICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1faml0LmdyYXBo
KClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOworICAgICAgICBpZiAoIW5vZGVQdHItPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFz
IGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCisgICAgICAg
ICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFm
dGVyIHRoZSBPU1IuCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICAKLSAgICBOb2RlKiBub2RlUHRyID0gJm1f
aml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOwotICAgIGlmICghbm9kZVB0ci0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBB
cyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAotICAgICAg
ICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVy
IHRoZSBPU1IuCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVm
aW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9n
ZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgaWYgKCFpbmZv
UHRyLT5hbGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJ
bmRleCgpKSB7Ci0gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRl
IG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgotICAgICAgICAvLyBU
aGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAvLwotICAgICAgICAvLyBWYWx1
ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVmFs
dWVUb051bWJlciBub2RlCi0gICAgICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVt
YWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9ybWVkIGEKLSAgICAgICAg
Ly8gICAgVmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdheS4gVGh1cywgd2UgY2FuIHN1YnN0
aXR1dGUgVmFsdWVUb051bWJlci4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVmFsdWVUb0ludDMy
OiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFs
dWUgaXMKLSAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1
dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCi0gICAgICAgIC8vICAgIGFuZCBhIFZh
bHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNl
IGl0Ci0gICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBo
YXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKLSAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxk
IGhhdmUgY29udmVydGVkIHRvIEludDMyLgotICAgICAgICAvLwotICAgICAgICAvLyBVSW50MzJU
b051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQz
MlRvTnVtYmVyCi0gICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJl
IG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgotICAgICAgICAvLyAgICBy
YXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9O
dW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUu
IFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgotICAgICAgICAvLyAg
ICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0g
ICAgICAgIAotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKLSAgICAgICAgICAgIG5vZGVQdHIgPSAm
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVy
YXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgIGlmIChp
bmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKLSAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvTnVtYmVySW5kZXgg
PSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05v
ZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXIg
PSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKyt2aXJ0dWFs
UmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2Vu
ZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZm8u
YWxpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
aWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZvLm5v
ZGVJbmRleCgpXTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAh
PSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKLSAg
ICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRv
SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2Rl
SW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRl
eCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9u
SW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgIGlmICghaW5mb1B0ci0+
YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgo
KSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUg
bm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgICAgICAv
LyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFs
dWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgICAgIC8vICAgIHRoZW4gaXQgbWVh
bnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9y
bWVkIGEKKyAgICAgICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXku
IFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWlu
aW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgIC8vICAgIFZhbHVl
VG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVl
VG9JbnQzMgorICAgICAgICAgICAgLy8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBi
ZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQKKyAgICAgICAgICAgIC8vICAg
IG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBu
dW1iZXIgd2hpbGUKKyAgICAgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRl
ZCB0byBJbnQzMi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBVSW50MzJUb051bWJl
cjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVt
YmVyCisgICAgICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBv
bmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgICAgIC8vICAg
IHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBh
IFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisgICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBp
cyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9m
CisgICAgICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQz
MiBpbnRlcm1lZGlhdGUuCisgICAgICAgIAorICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJl
cikgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGls
ZDEoKTsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4
XTsKKyAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+
dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgp
ICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4
ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9
IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXpl
KCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5v
ZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleFRvVXNlOwotICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUp
Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCi0gICAgICAg
ICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAg
IG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVG9O
dW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNl
ID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9J
bnQzMkluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2Ug
PSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051
bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2Ug
PSB1aW50MzJUb051bWJlckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOwotICAgICAgICAgICAgICAgIGlu
Zm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUlu
ZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07Cisg
ICAgICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5h
bGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICB9
CisgICAgICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIAotICAgIEFT
U0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKKyAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkp
OwogCi0gICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUp
IHsKLSAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERv
dWJsZSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5m
cHIoKSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIo
KSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7Ci0gICAgfQotICAgIGlmIChpbmZvUHRyLT5z
cGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
Pihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICBpZiAoaW5mb1B0ci0+cmVn
aXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICAgICAgaWYgKGluZm9Q
dHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkpOworICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5y
ZWdpc3RlckZvcm1hdCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5mb1B0ci0+c3BpbGxG
b3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNiArNjYsNTMgQEAgcHJpdmF0
ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9OwogCitlbnVtIFZhbHVlU291cmNlS2luZCB7CisgICAg
U291cmNlTm90U2V0LAorICAgIFZhbHVlSW5SZWdpc3RlckZpbGUsCisgICAgSW50MzJJblJlZ2lz
dGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKwogY2xhc3MgVmFsdWVTb3VyY2UgewogcHVibGlj
OgogICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25vZGVJbmRleChOb05vZGUpCisgICAg
ICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQoU291cmNlTm90U2V0KSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2
YWx1ZVNvdXJjZUtpbmQpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQo
dmFsdWVTb3VyY2VLaW5kKSkKICAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNl
Tm90U2V0KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBIYXZlTm9kZSk7CiAgICAgfQogICAg
IAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAg
IDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQogICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBIYXZlTm9kZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVk
aWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIGlmIChpc0lu
dDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJj
ZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVl
SW5SZWdpc3RlckZpbGUpOwogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgICAgIHJldHVy
biBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCkgIT0gU291cmNlTm90U2V0OworICAgIH0K
KyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CiAgICAgICAgIHJldHVybiBt
X25vZGVJbmRleDsKICAgICB9CiAgICAgCkBAIC05NCw2ICsxMjEsMjAgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgCiBwcml2YXRlOgorICAgIHN0YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtp
bmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA+PSBT
b3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIE5vTm9kZSAt
IGtpbmQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21O
b2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtp
bmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUluZGV4KTsKKyAgICAgICAg
aWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBIYXZlTm9kZTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNl
S2luZD4oa2luZCk7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKIH07
CiAgICAgCkBAIC01NjksNyArNjEwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBUcmFja2lu
ZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgYXJn
dW1lbnRzIGFuZCBieXRlY29kZQogICAgIC8vIG9wZXJhbmQtaW5kZXhlZCB2YXJpYWJsZXMuCi0K
KyAgICAKICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoaW50IG9wZXJhbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9w
ZXJhbmQpOwpAQCAtNjAyLDExICs2NDMsMTEgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0
T3BlcmFuZDsKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCi0gICAg
VmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCwgY29uc3Qg
VmFsdWVTb3VyY2UmKTsKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKG9wZXJhbmQsIHZhbHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9wZXJh
bmQob3BlcmFuZCkpOwogICAgIH0KIH07CiAKQEAgLTgzMSw3ICs4NzIsNyBAQCBpbmxpbmUgU3Bl
Y3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGpp
dCwgdHJ1ZSkKICAgICAsIG1fY29tcGlsZU9rYXkodHJ1ZSkKICAgICAsIG1fYXJndW1lbnRzKGpp
dC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQotICAgICwgbV92YXJpYWJsZXMoaml0LmNv
ZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xv
Y2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bh
Y2tlZEludFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFja2VkSW50VmVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BhY2tlZEludFZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhY2tl
ZEludFZlY3Rvcl9oCisjZGVmaW5lIFBhY2tlZEludFZlY3Rvcl9oCisKKyNpbmNsdWRlICJCaXRW
ZWN0b3IuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgY2xhc3MgYWxsb3dzIHlvdSB0
byBjcmVhdGUgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIHdoZXJlIHRob3NlCisvLyBpbnRlZ2VycyBo
YXZlIG9ubHkgYSBoYW5kZnVsIG9mIGJpdHMgZWFjaC4gSXQgaXMgbm90IG1lYW50IHRvIGJlCisv
LyBlZmZpY2llbnQgaW4gdGltZSwgYnV0IG9ubHkgaW4gc3BhY2UuIChUaG91Z2ggbWFraW5nIGl0
IGVmZmljaWVudAorLy8gaW4gdGltZSBmb3IgcG93ZXItb2YtMiB2YWx1ZXMgb2YgYml0Q291bnQg
d291bGQgbm90IGJlIGRpZmZpY3VsdC4pCisvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3Jr
IGFzIGV4cGVjdGVkIGZvciBzaWduZWQgdHlwZXMsIGlmIHlvdQorLy8gYXJlIHJlbHlpbmcgb24g
dGhlIHNpZ24gYmVpbmcgcHJlc2VydmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBiaXRDb3VudD4KK2NsYXNzIFBhY2tlZEludFZlY3RvciB7CitwdWJsaWM6CisgICAgUGFja2Vk
SW50VmVjdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCk7CisgICAgICAgIEFT
U0VSVChiaXRDb3VudCA8IHNpemVvZih2b2lkKikgKiA4KTsKKyAgICB9CisgICAgCisgICAgUGFj
a2VkSW50VmVjdG9yKGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9i
aXRzKG90aGVyLm1fYml0cykKKyAgICB7CisgICAgfQorICAgIAorICAgIFBhY2tlZEludFZlY3Rv
ciYgb3BlcmF0b3I9KGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAg
ICBtX2JpdHMgPSBvdGhlci5tX2JpdHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0
cy5zaXplKCkgLyBiaXRDb3VudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbnN1cmVTaXplKHNp
emVfdCBudW1JbnRzKQorICAgIHsKKyAgICAgICAgbV9iaXRzLmVuc3VyZVNpemUobnVtSW50cyAq
IGJpdENvdW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUludHMp
CisgICAgeworICAgICAgICBtX2JpdHMucmVzaXplKG51bUludHMgKiBiaXRDb3VudCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAgICAgbV9iaXRzLmNsZWFy
QWxsKCk7CisgICAgfQorICAgIAorICAgIFQgZ2V0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
YkluZGV4ID0gMDsgc3ViSW5kZXggPCBiaXRDb3VudDsgKytzdWJJbmRleCkgeworICAgICAgICAg
ICAgcmVzdWx0IDw8PSAxOworICAgICAgICAgICAgcmVzdWx0IHw9IG1fYml0cy5nZXQoaW5kZXgg
KiBiaXRDb3VudCArIHN1YkluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4ocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4
LCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gRG8gYXJpdGhtZXRpYyB1c2luZyB1aW50cHRy
X3QsIGJlY2F1c2UgKDEpIHdlIGtub3cgd2hhdCBpdCBpcworICAgICAgICAvLyAoVCBtaWdodCBi
ZSBhbiBlbnVtKSBhbmQgKDIpIGl0J3MgdGhlIGxhcmdlc3QgaW50ZWdlciB0eXBlIHRoYXQKKyAg
ICAgICAgLy8gaXMgbGlrZWx5IHRvIHBlcmZvcm0gZGVjZW50bHkgd2VsbC4KKyAgICAgICAgdWlu
dHB0cl90IG15VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFByZWxpbWluYXJ5IHNhbml0eSBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBu
b3Qgb3V0IG9mIHJhbmdlLgorICAgICAgICBBU1NFUlQoKG15VmFsdWUgJiBtYXNrKCkpID09IG15
VmFsdWUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IGJpdENv
dW50OyBzdWJJbmRleC0tID4gMDspIHsKKyAgICAgICAgICAgIG1fYml0cy5zZXQoaW5kZXggKiBi
aXRDb3VudCArIHN1YkluZGV4LCAhIShteVZhbHVlICYgMSkpOworICAgICAgICAgICAgbXlWYWx1
ZSA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNo
ZWNrIHRoYXQgd2Ugc3RvcmVkIHdoYXQgdGhlIHVzZXIgdGhvdWdodCB3ZQorICAgICAgICAvLyBz
dG9yZWQuCisgICAgICAgIEFTU0VSVChnZXQoaW5kZXgpID09IHZhbHVlKTsKKyAgICB9Citwcml2
YXRlOgorICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgbWFzaywgYW5kIGlzIGNhcmVmdWwgdG8gbm90
IHN0ZXAgb24gdGhlIHdyYXAtYXJvdW5kCisgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBzaGlmdCBh
bW91bnQgKDEgPDwgMzIgaXMgMSBzaW5jZSAzMiB3cmFwcyB0byAwKS4gVGhlcmUKKyAgICAvLyBp
cyB0aGUgc2VwYXJhdGUgcXVlc3Rpb24gb2Ygd2h5IHlvdSB3b3VsZCBldmVyIHVzZSB0aGlzIHRv
IHN0b3JlIDMyLWJpdAorICAgIC8vIG9yIDY0LWJpdCB2YWx1ZXMsIGJ1dCBpdCdzIHByb2JhYmx5
IGJldHRlciB0byBoYXZlIHRoaXMgd29yayBhcyBleHBlY3RlZAorICAgIC8vIGluIHN1Y2ggc2l0
dWF0aW9ucyByZWdhcmRsZXNzLgorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFzaygpIHsgcmV0dXJu
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpIDw8IChiaXRDb3VudCAtIDEpKSAtIDE7IH0KKyAg
ICAgICAgICAgICAgIAorICAgIC8vIFN0b3JlcyBpbnRlZ2VycyBiaXQgYnkgYml0IGluIGJpZyBl
bmRpYW4uCisgICAgQml0VmVjdG9yIG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6OlBhY2tlZEludFZlY3RvcjsKKworI2VuZGlmIC8vIFBhY2tlZEludFZlY3Rv
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgVW5pb25GaW5kX2gKKyNkZWZpbmUgVW5pb25GaW5kX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIFVuaW9u
RmluZCBjbGFzcyBjYW4gYmUgdXNlZCB0byBjb21wdXRlIGRpc2pvaW50IHNldHMgdXNpbmcgdGhl
CisvLyBkaXNqb2ludC1zZXQgZm9yZXN0IGRhdGEgc3RydWN0dXJlLiBFYWNoIFVuaW9uRmluZCBp
bnN0YW5jZSBpcyBhCisvLyBub2RlIGluIHRoZSBmb3Jlc3QuIFR5cGljYWxseSB5b3UgdXNlIGl0
IGJ5IHVzaW5nIFVuaW9uRmluZCBhcyBhCisvLyBzdXBlcmNsYXNzOgorLy8KKy8vIGNsYXNzIE1l
bWJlck9mU2V0OiBwdWJsaWMgVW5pb25GaW5kPE1lbWJlck9mU2V0PiB7IC4uLiB9CisvLworLy8g
Q2FsbGluZyB4LT5maW5kKCkgZ2l2ZXMgeW91IGEgTWVtYmVyT2ZTZXQqIHRoYXQgcmVwcmVzZW50
cyB0aGUKKy8vIGRpc2pvaW50IHNldCB0aGF0IHggYmVsb25ncyB0by4gQ2FsbGluZyB4LT51bmlm
eSh5KSB1bmlmaWVzIHgncworLy8gc2V0IHdpdGggeSdzIHNldCwgYW5kIGVuc3VyZXMgdGhhdDoK
Ky8vCisvLyB4LT5maW5kKCkgPT0geS0+ZmluZCgpCisvLworLy8gYW5kIHRoYXQ6CisvLworLy8g
YS0+ZmluZCgpID09IGItPmZpbmQoKQorLy8KKy8vIGZvciBhbnkgYSwgYiBpZiBwcmlvciB0byB0
aGUgY2FsbCB0byB4LT51bmlmeSh5KSwgd2Ugd291bGQgaGF2ZQorLy8gaGFkOgorLy8KKy8vIGEt
PmZpbmQoKSA9PSB4CisvLyBiLT5maW5kKCkgPT0geQorLy8KKy8vIFRoaXMgaW1wbGVtZW50YXRp
b24gaXMgYWxtb3N0IGFtb3J0aXplZCBPKDEpLCBidXQgY291bGQgYmUgd29yc2UKKy8vIGluIHVu
bGlrZWx5IHBhdGhvbG9naWNhbCBjYXNlcy4gSXQgZmF2b3JzIGhhdmluZyBhIG5vbi1yZWN1cnNp
dmUKKy8vIHNpbmdsZSBwYXNzIGltcGxlbWVudGF0aW9uIG9mIHVuaWZ5KCkgYW5kIGZpbmQoKSBv
dmVyIGVuc3VyaW5nIHRoZQorLy8gdGhlb3JldGljYWwgTyhJbnZlcnNlQWNrZXJtYW5uW25dKSBh
bW9ydGl6ZWQgYm91bmQsIHdoaWNoIGlzIG11Y2gKKy8vIGNsb3NlciB0byBhbW9ydGl6ZWQgTygx
KS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFVuaW9uRmluZCB7CitwdWJsaWM6Cisg
ICAgVW5pb25GaW5kKCkKKyAgICAgICAgOiBtX3BhcmVudCgwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgVCogZmluZCgpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
Kj4odGhpcyk7CisgICAgICAgIFQqIG5leHQgPSByZXN1bHQtPm1fcGFyZW50OworICAgICAgICB3
aGlsZSAobmV4dCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV4dDsKKyAgICAgICAgICAgIG5l
eHQgPSByZXN1bHQtPm1fcGFyZW50OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChyZXN1bHQp
OworICAgICAgICBpZiAocmVzdWx0ICE9IHRoaXMpCisgICAgICAgICAgICBtX3BhcmVudCA9IHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmlm
eShUKiBvdGhlcikKKyAgICB7CisgICAgICAgIFQqIGEgPSBzdGF0aWNfY2FzdDxUKj4odGhpcykt
PmZpbmQoKTsKKyAgICAgICAgVCogYiA9IG90aGVyLT5maW5kKCk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoIWEtPm1fcGFyZW50KTsKKyAgICAgICAgQVNTRVJUKCFiLT5tX3BhcmVudCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgYS0+bV9wYXJlbnQgPSBiOworICAgIH0KK3ByaXZhdGU6CisgICAgVCogbV9w
YXJlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpVbmlvbkZpbmQ7
CisKKyNlbmRpZiAvLyBVbmlvbkZpbmRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108961</attachid>
            <date>2011-09-27 22:05:15 -0700</date>
            <delta_ts>2011-09-27 22:31:31 -0700</delta_ts>
            <desc>the patch - more fixes</desc>
            <filename>liverangesplit_patch_11.diff</filename>
            <type>text/plain</type>
            <size>87147</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBA
CisyMDExLTA5LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
QWN0aW9uYWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJl
ZGljdGlvbnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rp
b25zOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJn
dW1lbnRVcHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6
OnBhY2spOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1By
ZWRpY3Rpb25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJv
Y2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElz
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlUmVjb3JkOjpzZXRGaXJzdFRp
bWUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6UGFja2VkSW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRJbnRWZWN0b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6
Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmdldCk6CisgICAgICAg
IChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVj
dG9yOjptYXNrKToKKyAgICAgICAgKiB3dGYvVW5pb25GaW5kLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmlvbkZpbmQ6OlVuaW9uRmluZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6Zmlu
ZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6dW5pZnkpOgorCiAyMDExLTA5LTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBzaG91bGQgc3Bl
Y3VsYXRlIG1vcmUgYWdncmVzc2l2ZWx5IG9uIHJlYWRzIG9mIGFycmF5Lmxlbmd0aApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzAsNiArMTQzMCwxMCBAQAogCQkJTmFtZT0iYnl0ZWNvZGUiCiAJCQk+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQWN0aW9uYWJsZVBy
ZWRpY3Rpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtOTQxLDYgKzk0MSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYWNrZWRJbnRWZWN0b3IuaCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFnZUFsbG9jYXRpb24uaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBACiAJCTBC
REZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6
ZUxpbWl0cy5jcHAgKi87IH07CisJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
NkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3
MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRW
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJCTBGNjM2
REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsgfTsKKwkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZBIC8q
IEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRp
Y3Rpb24uaCAqLzsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJ
MEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIy
IC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJC
MTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09N
UElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtNjUsNiArNjcs
NyBAQAogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgx
Q0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAq
LzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYg
LyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3Rl
ZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzk3LDggKzgwMCwxMCBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFz
dE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFs
bG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVj
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZEludFZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEg
LyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE0LDYgKzgx
OSw3IEBACiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJp
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIzMTQxMTVEMUEwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
YWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGll
cy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0
aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODIyLDcgKzE4MjgsOSBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLywKKwkJ
CQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCisJCQkJMEY2MzZE
OUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAorCQkJCTBGMTZENzI0
MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5MTQyODA2
OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RD
MEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLApA
QCAtMjM1Myw2ICsyMzYxLDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVj
b2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYz
NkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkw
RkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4MzYsNyArMjg0
NSwxMCBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBBbGxvY2F0
aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEwMTQyRDI3RDcw
MEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEy
MTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMzE1MSw2ICszMTYzLDcgQEAKIAkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAorCQkJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRD
b2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZG
MTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzYyLDcg
KzMzNzUsNiBAQAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhv
cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjA0RThC
MTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4
ODBGMUMxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGls
ZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIg
LyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlv
bmFibGVQcmVkaWN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWN0aW9uYWJs
ZVByZWRpY3Rpb25faAorI2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisKKyNpbmNsdWRl
ICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFja2VkSW50VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBBbiBhY3Rpb25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQg
b24gc3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcworLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4g
cGFzc2luZyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCisv
LyBpbiBDb2RlQmxvY2suCisKK2VudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24geworICAgIE5vQWN0
aW9uYWJsZVByZWRpY3Rpb24sCisgICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKKyAgICBFbmZv
cmNlQXJyYXlQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgorfTsKKwor
aW5saW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRp
Y3RlZFR5cGUoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rp
b247CisgICAgCisgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICByZXR1cm4gRW5mb3JjZUFycmF5UHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJl
ZGljdGlvbjsKKyAgICAKKyAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKK30KKwor
aW5saW5lIGJvb2wgdmFsdWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHZhbHVlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAg
IHN3aXRjaCAocHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKworICAgIGNhc2UgRW5mb3JjZUFycmF5
UHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7
CisKKyAgICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmlzQm9vbGVhbigpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQo
cHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitpbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25U
b1N0cmluZyhBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAo
cHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAg
cmV0dXJuICJFbmZvcmNlSW50MzIiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VBcnJheVBy
ZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKKyAgICAgICAgCisgICAg
Y2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUJv
b2xlYW4iOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlv
biA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uIjsKKyAgICB9Cit9CisKK3R5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlv
bmFibGVQcmVkaWN0aW9uLCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKKworY2xhc3Mg
QWN0aW9uYWJsZVByZWRpY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
bnMoKSB7IH0KKworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmVu
c3VyZVNpemUobnVtQXJndW1lbnRzKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShu
dW1WYXJpYWJsZXMpOworICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOworICAgICAgICBt
X3ZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50
KHVuc2lnbmVkIGFyZ3VtZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLnNldChhcmd1bWVudCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7
CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzLmdldChhcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VmFyaWFibGUodW5z
aWduZWQgdmFyaWFibGUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV92YXJpYWJsZXMuc2V0KHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcmlhYmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMu
Z2V0KHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
dmFyaWFibGVVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9
CisgICAgCisgICAgdm9pZCBwYWNrKCkKKyAgICB7CisgICAgICAgIHBhY2tWZWN0b3IobV9hcmd1
bWVudHMpOworICAgICAgICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25W
ZWN0b3ImIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24p
CisgICAgICAgICAgICAgICAgbGFzdFNldEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICB2
ZWN0b3IucmVzaXplKGxhc3RTZXRJbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25h
YmxlUHJlZGljdGlvblZlY3RvciBtX2FyZ3VtZW50czsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
blZlY3RvciBtX3ZhcmlhYmxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQWN0aW9uYWJsZVByZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw5ICsyNDAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsg
cmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc093blB0cjxDb2RlQmxv
Y2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgp
OyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFByZWRpY3Rpb25zKFBhc3NPd25QdHI8UHJl
ZGljdGlvblRyYWNrZXI+IHByZWRpY3Rpb25zKSB7IG1fcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
czsgfQotICAgICAgICBQcmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRpY3Rpb25zLmdldCgpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKTsKIApAQCAtOTc1LDggKzk3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAgIAotICAgICAgICBPd25Q
dHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7Ci0KICAgICAgICAgaW50MzJfdCBt
X2V4ZWN1dGVDb3VudGVyOwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tl
ci5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0aW9uVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsOSBAQAogCiAj
aW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gaGVscGVyIGZ1bmN0
aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlu
bGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5k
IDwgMDsgfQotCiBzdHJ1Y3QgUHJlZGljdGlvblNsb3QgewogcHVibGljOgogICAgIFByZWRpY3Rp
b25TbG90KCkKQEAgLTUwLDQ2ICs0Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIFByZWRpY3Rpb25UcmFja2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VmFyaWFibGVzKQotICAgICAgICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAg
LCBtX3ZhcmlhYmxlcyhudW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lk
IGluaXRpYWxpemVTaW1pbGFyVG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQotICAg
IHsKLSAgICAgICAgbV9hcmd1bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29weUxvY2Fsc0Zyb20oY29uc3QgUHJlZGljdGlvblRy
YWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMgPSBvdGhlci5tX2FyZ3Vt
ZW50czsKLSAgICAgICAgbV92YXJpYWJsZXMgPSBvdGhlci5tX3ZhcmlhYmxlczsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KLQot
ICAgIGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fYXJn
dW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAg
ewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpLCBw
cmVkaWN0aW9uKTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVz
LnNpemUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPj0gMCk7Ci0gICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVzW29wZXJhbmRdLm1fdmFs
dWUsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKICAgICBib29sIHByZWRpY3RHbG9iYWxWYXIo
dW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAgLTEwMiwyMCArNTgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUs
IHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIGdldEFyZ3VtZW50
UHJlZGljdGlvbih1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1thcmd1bWVudF0ubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBQcmVkaWN0ZWRUeXBlIGdl
dFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRQcmVkaWN0aW9u
KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpKTsKLSAgICAgICAgaWYgKCh1bnNpZ25l
ZClvcGVyYW5kIDwgbV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAg
ICB9Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2ln
bmVkIHZhck51bWJlcikKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rp
b25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEp
OwpAQCAtMTI1LDggKzY3LDYgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
VmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yPFByZWRp
Y3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGlj
dGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw3ICs4MywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc1BoaVN0YWNr
KCk7CiAgICAgLy8gQWRkIHNwaWxsIGxvY2F0aW9ucyB0byBub2Rlcy4KICAgICB2b2lkIGFsbG9j
YXRlVmlydHVhbFJlZ2lzdGVycygpOwotCisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBBU1NFUlQo
b3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiAm
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorICAgIAogICAgIC8v
IEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgog
ICAgIE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTE2LDcgKzEyNCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdo
ZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExv
Y2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlOwogCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTI5LDE2ICsxMzcsMjEgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20g
cHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRvIGNvdmVy
IHRoZXNlLgogICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1heChtX3ByZXNlcnZlZFZh
cnMsIG9wZXJhbmQgKyAxKTsKLQotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQ
aGkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIAorICAgICAg
ICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3Vy
cmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRl
eCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNB
dEhlYWRbb3BlcmFuZF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIAogICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9w
ZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5t
X2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3Bl
cmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVt
ZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4K
QEAgLTE0NywyMCArMTYwLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJn
dW1lbnRzKTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CiAK
ICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQg
aW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCisgICAgICAgICAgICAgICAgLy8gdGhlIEdl
dExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5s
b2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4Owor
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChu
b2RlLm9wID09IFNldExvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAgICAgICBO
b2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRz
W2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2Rl
SW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhl
YWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFu
ZCwgTm9kZUluZGV4IHZhbHVlKQpAQCAtMTY4LDcgKzE5Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBv
cGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4K
QEAgLTY4OCw2ICs3MTYsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7CiAg
ICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJv
ZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCisgICAgLy8gdXMgdG8gdHJh
Y2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBh
c3NlZCwgYXMKKyAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0
bHkuCisgICAgaWYgKCFtX2N1cnJlbnRJbmRleCkgeworICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0
VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgIH0K
KyAgICB9CiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTQyMSwyMCArMTQ2MiwzNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAKICAgICAgICAgUHJl
ZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29y
czsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOworICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAg
ICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c1t2YXJOb10gOiBwcmVkZWNlc3NvckJs
b2NrLT5tX2xvY2Fsc1t2YXJOb107CisgICAgICAgICAgICBWYXJpYWJsZVJlY29yZCYgdmFyID0g
KHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRUYWlsW3Zh
ck5vXTsKIAogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52
YWx1ZTsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGkpOwotICAg
ICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSA6IHZhck5vKSkpOworICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJ
blByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1l
bnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1f
bG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKICAg
ICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJs
b2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgLy8g
R2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9u
bHkgbmVlZCB0aGUgdHdvCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZv
ciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NE
YXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBt
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3Rh
Y2spKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRh
Rm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+
dW5pZnkoZGF0YUZvclBoaSk7CiAKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFw
aFtlbnRyeS5tX3BoaV07CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKQEAg
LTE0NTIsOCArMTUwOSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGksIE9w
SW5mbyhkYXRhRm9yUGhpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBoaU5vZGUgPSAm
bV9ncmFwaFtlbnRyeS5tX3BoaV07IC8vIHJlbG9hZCBhZnRlciB2ZWN0b3IgcmVzaXplCiAgICAg
ICAgICAgICBOb2RlJiBuZXdQaGlOb2RlID0gbV9ncmFwaFtuZXdQaGldOwpAQCAtMTUyMSw2ICsx
NTc4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHByb2Nlc3NQaGlTdGFj
azxBcmd1bWVudFBoaVN0YWNrPigpOwogICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
ID0gbV9wcmVzZXJ2ZWRWYXJzOworICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2Fs
czsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogCiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBlbnVtIENvbXBpbGVNb2Rl
IHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21wCiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEdyYXBoIGRmZyhjb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIEdyYXBoIGRmZzsKICAg
ICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIApAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwg
c28gdGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAgIC8vIGFy
ZSBzYXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1Ig
ZW50cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5n
IG1heSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlvblRyYWNr
ZXI+IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkpOwotICAg
ICpwcmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotICAgIAog
ICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsK
ICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VS
VChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM5IEBAIGNvbnN0IGNo
YXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3Ag
JiBOb2RlSWRNYXNrXTsKIH0KIAorY29uc3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlhYmxlQWNj
ZXNzRGF0YShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKK3sKKyAgICAv
LyBWYXJpYWJsZXMgYXJlIGFscmVhZHkgbnVtYmVyZWQuIEZvciByZWFkYWJpbGl0eSBvZiBJUiBk
dW1wcywgdGhpcyByZXR1cm5zCisgICAgLy8gYW4gYWxwaGFiZXRpYyBuYW1lIGZvciB0aGUgdmFy
aWFibGUgYWNjZXNzIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KKyAgICAvLyByZWFz
b24gYWJvdXQgdHdvIG51bWJlcnMgKHZhcmlhYmxlIG51bWJlciBhbmQgbGl2ZSByYW5nZSBudW1i
ZXIpLCBidXQgaW5zdGVhZAorICAgIC8vIGEgbnVtYmVyIGFuZCBhIGxldHRlci4KKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCZtX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChpbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIGlmICghaW5kZXgpCisgICAg
ICAgIHJldHVybiAiQSI7CisKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIEJvdW5kc0No
ZWNrZWRQb2ludGVyPGNoYXI+IHB0cihidWYsIHNpemVvZihidWYpKTsKKyAgICAKKyAgICB3aGls
ZSAoaW5kZXgpIHsKKyAgICAgICAgKnB0cisrID0gJ0EnICsgKGluZGV4ICUgMjYpOworICAgICAg
ICBpbmRleCAvPSAyNjsKKyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICBy
ZXR1cm4gYnVmOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpA
QCAtMTE2LDEyICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4
LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIi
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgIGludCBsb2NhbCA9IG5v
ZGUubG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSkKLSAgICAg
ICAgICAgIHByaW50ZigiJXNhcmcldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsIC0g
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcykiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwg
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwcmludGYoIiVzciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bG9jYWwpOworICAgICAgICAgICAgcHJpbnRmKCIlc3IldSglcykiLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBvcGVyYW5kLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAob3AgPT0g
SlNDb25zdGFudCkgewpAQCAtMTQ1LDggKzE4MCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBwcmludGYoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkg
ewotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQotICAgICAgICAgICAgcHJpbnRmKCIgIHBy
ZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAg
ICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcobm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5v
ZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIs
IHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzUHJlZGljdGlvbigpKQpAQCAtMjA0LDEw
ICsyMzksMTAgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQogdm9pZCBH
cmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBpZiAoZXhlYykgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1
bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX3By
ZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZB
cmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBt
X2FyZ3VtZW50cy5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgYXJnID0g
MTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKQotICAgICAgICAgICAgbV9wcmVkaWN0
aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3Vt
ZW50KGFyZyAtIDEpKSk7CisgICAgICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3VtZW50
KGFyZyAtIDEpKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2spOwpAQCAtMjIw
LDEwICsyNTUsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YQog
ICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKSk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
cHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9wcmVkaWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOworICAg
ICAgICBwcmludGYoIkFyZ3VtZW50IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRp
Y3Rpb25Ub1N0cmluZyhhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlz
dGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wg
b3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisK
IHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIAogLy8gRm9yIGV2ZXJ5IGxvY2FsIHZhcmlh
YmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KQEAgLTUz
LDYgKzU2LDEyIEBAIHN0cnVjdCBWYXJpYWJsZVJlY29yZCB7CiAgICAgICAgIDogdmFsdWUoTm9O
b2RlKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA9PSBOb05vZGUpOworICAg
ICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggdmFsdWU7CiB9
OwpAQCAtMTEwLDggKzExOSwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAgICwgYmVn
aW4oYmVnaW4pCiAgICAgICAgICwgZW5kKE5vTm9kZSkKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9s
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50
cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChudW1Mb2NhbHMpCisgICAgICAgICwgbV9hcmd1
bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxv
Y2FscykKICAgICB7CiAgICAgfQogCkBAIC0xMjYsOCArMTM3LDEyIEBAIHN0cnVjdCBCYXNpY0Js
b2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJl
ZGVjZXNzb3JzOwotICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzOwot
ICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2FsczsKKyAgICAKKyAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOworICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOworICAgIAorICAgIFZlY3RvcjxWYXJpYWJs
ZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7CisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3Jk
LCAxNj4gbV9sb2NhbHNBdFRhaWw7CiB9OwogCiAvLyAKQEAgLTEzOCwxMSArMTUzLDYgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUg
dmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2Rl
LCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJndW1lbnRzLCBu
dW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLQogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC0xNzEsMTYgKzE4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KICAgICAKLSAg
ICBQcmVkaWN0aW9uVHJhY2tlciYgcHJlZGljdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcHJlZGljdGlvbnM7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFu
ZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJl
ZGljdGlvbnMucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCiAgICAg
Ym9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdEds
b2JhbFZhcih2YXJOdW1iZXIsIHByZWRpY3Rpb24pOwpAQCAtMTkwLDExICsxOTAsMTIgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rp
b24pOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
IGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJu
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIo
bm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKQEAgLTIxMiwxMSArMjEzLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbihvcGVyYW5kKTsKLSAgICB9
Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2lnbmVk
IHZhck51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLmdldEdsb2Jh
bFZhclByZWRpY3Rpb24odmFyTnVtYmVyKTsKQEAgLTI0NCw3ICsyNDAsMTAgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+bG9jYWwo
KSk7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAg
ICAgICAgICAgcmV0dXJuIGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFyTnVtYmVy
KCkpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CkBAIC0zMjQsNiArMzIzLDkgQEAgcHVibGljOgog
CiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUp
OworICAgIAorICAgIC8vIFRoaXMgaXMgTyhuKSwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHZlcmJvc2UgZHVtcHMuCisgICAgY29uc3QgY2hhciogbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRh
KFZhcmlhYmxlQWNjZXNzRGF0YSopOwogI2VuZGlmCiAKICAgICB2b2lkIHByZWRpY3RBcmd1bWVu
dFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMzMzLDcgKzMzNSwxMCBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4gbV9tZXRob2RDaGVja0RhdGE7CiAgICAg
VmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3Rv
cjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKKyAgICBWZWN0b3I8Tm9k
ZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKKyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nl
c3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgdW5zaWduZWQgbV9wcmVzZXJ2
ZWRWYXJzOworICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7CiBwcml2YXRlOgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw0MCArMzkz
LDIzIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50
cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNC
bG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJl
bCgpKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUFyZ3VtZW50ID0gMDsK
LSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVu
dHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rp
b25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChiYXNpY0Js
b2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2
ZUxvY2FsID0gaTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2su
bV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5
cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsK
LSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1l
bnQgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0
TGl2ZUFyZ3VtZW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2Fy
Z3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xpdmVBcmd1bWVudHMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChsYXN0TGl2ZUxvY2FsKSB7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFy
aWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxvY2FsICsgMSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9s
aXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVMb2NhbDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNldChpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFy
QWxsKCk7CisgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5wYWNrKCk7CisgICAgICAgIAor
ICAgICAgICBlbnRyeS0+bV9wcmVkaWN0aW9ucyA9IGFjdGlvbmFibGVQcmVkaWN0aW9uczsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNpY0Jsb2NrKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KIAogLy8gRW1pdCB2YXJp
b3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcg
dGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAK
QEAgLTEwOCw2ICsxMDksNTEgQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5k
ZXg7CiB9OwogCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFy
aWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAg
ICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25l
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJlZGlj
dGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9j
YWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJh
bmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisg
ICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9u
LCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQs
IHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUg
c2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAg
ICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3Qg
ZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMg
ZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKIHR5cGVkZWYgdW5zaWduZWQgQXJpdGhO
b2RlRmxhZ3M7CiAjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwCiAjZGVmaW5lIE5vZGVV
c2VkQXNOdW1iZXIgICAweDAxCkBAIC0yMjMsNiArMjY5LDkgQEAgc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKICAgICBcCisgICAgLyogTWFya2VyIGZvciBhcmd1
bWVudHMgYmVpbmcgc2V0LiAqL1wKKyAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAorICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRB
bmQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdE9yLCBOb2RlUmVzdWx0SW50MzIp
IFwKQEAgLTQ1NiwxNSArNTA1LDMyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrKS5pc0Jvb2xlYW4o
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBj
YXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzTG9j
YWwoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IEdldExvY2FsIHx8IG9wID09IFNldExv
Y2FsOworICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgfQotCisg
ICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9v
cEluZm8pLT5maW5kKCk7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgp
CiAgICAgewotICAgICAgICBBU1NFUlQoaGFzTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiAoVmly
dHVhbFJlZ2lzdGVyKW1fb3BJbmZvOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPmxvY2FsKCk7CiAgICAgfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDIzICszNSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
aW5saW5lIGJvb2wgcHJlZGljdGlvbklzVmFsaWQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHR5cGUpCi17Ci0gICAgLy8gdGhpcyB0YWtlcyBp
bnRvIGFjY291bnQgb25seSBsb2NhbCB2YXJpYWJsZSBwcmVkaWN0aW9ucyB0aGF0IGdldCBlbmZv
cmNlZAotICAgIC8vIG9uIFNldExvY2FsLgotICAgIAotICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLSAgICAKLSAgICBpZiAo
aXNBcnJheVByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFs
RGF0YSwgdmFsdWUpOwotICAgIAotICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHR5cGUpKQot
ICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogI2lmIEVOQUJMRShERkdfT1NS
X0VOVFJZKQpAQCAtNjYsNyArNDksNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAjZW5kaWYKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVC
bG9jay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsK
QEAgLTk1LDI2ICs3NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNv
dXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRp
bWUuCiAgICAgCi0gICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zID0gYmFzZWxpbmVD
b2RlQmxvY2stPnByZWRpY3Rpb25zKCk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3Rpb25zLT5udW1i
ZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChp
KQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFy
Z3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1l
bnRVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVk
aWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnQoaSk7CisgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAoaSA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAt
IDEpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIHBy
ZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSk7
CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUg
aXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0
aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9mVmFyaWFibGVzKCk7ICsr
aSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCi0gICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGVVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMu
dmFyaWFibGUoaSk7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRp
Y3Rpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
dWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1
ZSgpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0
aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkp
OworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1
IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUo
KS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24p
KTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEyOSw3ICsx
MTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAg
ICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdygmZXhl
Yy0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBi
ZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuLlxuIik7CisgICAgICAgIHByaW50ZigiICAgIE9T
UiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgREZH
T1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlIDx3dGYvQml0VmVj
dG9yLmg+CisjaW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTM5LDggKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlE
YXRhIHsKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNo
aW5lQ29kZU9mZnNldDsKLSAgICBCaXRWZWN0b3IgbV9saXZlQXJndW1lbnRzOwotICAgIEJpdFZl
Y3RvciBtX2xpdmVWYXJpYWJsZXM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIG1fcHJlZGlj
dGlvbnM7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRl
eChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTks
MTQgKzMxOSwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdChtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTU1OSwxNSArNTU5LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZl
cmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0
IGRvZXNuJ3QgZG8gYW55dGhpbmcuCi0gICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERp
cmVjdDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIFRoaXMg
Z2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2Fz
ZSBQaGFudG9tOgorICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1
LDcgKzE1NSwyMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAj
aWZuZGVmIE5ERUJVRwogdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB7
Ci0gICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKKyAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ik5vdFNldCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6
CisgICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICJJbnQzMiIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhhdmVOb2RlOgorICAgICAgICBmcHJpbnRmKG91
dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAK
IHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CkBAIC0yMDMsOSArMjE2
LDkgQEAgT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaAogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9
IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZEZvckFyZ3VtZW50KGFyZ3VtZW50
KSwgaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAgICAgICBtX2FyZ3VtZW50c1thcmd1
bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJn
dW1lbnRdKTsKICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3Zh
cmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCi0gICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxl
XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFyaWFibGUsIGppdC0+bV92YXJpYWJs
ZXNbdmFyaWFibGVdKTsKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkBAIC02OTUsNyArNzA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
LSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVk
aWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKIAogICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1w
dCB0byBjb21waWxlLgogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewpA
QCAtNzcwLDcgKzc4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgIHx8ICghbV9ieXRlY29kZUluZGV4Rm9yT1NSICYmICFuZXh0Tm9k
ZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICBtX2J5dGVjb2RlSW5kZXhG
b3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgCi0g
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJl
ZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2Rl
LmxvY2FsKCkpKTsKQEAgLTc5Myw5ICs4MDYsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdz
IG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCiAgICAgICAgIC8v
IHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25z
IGluIHRoZSByZWdpc3RlciBmaWxlLgotICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CisgICAgICAgIHZhbHVlU291cmNl
UmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2U6OmZvclByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wOyBpdCBqdXN0
IG1hcmtzIHRoZSBmYWN0IHRoYXQgdGhlIGFyZ3VtZW50IGlzIGJlaW5nIHVzZWQuCisgICAgICAg
IC8vIEJ1dCBpdCBtYXkgYmUgcHJvZml0YWJsZSB0byB1c2UgdGhpcyBhcyBhIGhvb2sgdG8gcnVu
IHNwZWN1bGF0aW9uIGNoZWNrcworICAgICAgICAvLyBvbiBhcmd1bWVudHMsIHRoZXJlYnkgYWxs
b3dpbmcgdXMgdG8gdHJpdmlhbGx5IGVsaW1pbmF0ZSBzdWNoIGNoZWNrcyBpZgorICAgICAgICAv
LyB0aGUgYXJndW1lbnQgaXMgbm90IHVzZWQuCisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBC
aXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKQEAgLTEzODcsOCArMTQwNywxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3Zl
Y3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAg
ICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwotICAgICAg
ICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKG1faml0
LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSkpCisgICAgICAgIGlmIChi
YXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24oYmFzZU5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNrQXJyYXkoQCV1KSAg
ICIsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlmCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJbiBjYXNlcyB3aGVyZSB0
aGVyZSBhcmUgc3Vic2VxdWVudCBieV92YWwgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYmFzZSBpdCBt
aWdodCBoZWxwIHRvIGNhY2hlCkBAIC0xNDIyLDggKzE0NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3Ig
KDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUg
YmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIE5v
ZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYg
KGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFw
aCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBpZiAoYmFzZU5v
ZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKGJhc2VOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKSB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJC
T1NFKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaGVja0FycmF5QCV1ICAgIiwgbm9k
ZS5jaGlsZDEoKSk7CisjZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIH0KIAogICAgICAgICBiYXNlLnVzZSgpOwog
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKQEAgLTE4NDAsNyArMTg2OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJl
ZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQor
ICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9u
KGJhc2VOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAgLTIxNTMsMTAgKzIxODEs
MjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIG1faml0
LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVT
b3VyY2UoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsg
KytpKQotICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgQVNTRVJU
KG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZh
bHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIG1fYXJn
dW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rp
b24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJs
b2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlKQorICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0g
PSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAogICAgIG1fbGFz
dFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgIG1fYnl0
ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsK
IApAQCAtMjIyNyw5ICsyMjY5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBtX2J5dGVjb2Rl
SW5kZXhGb3JPU1IgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5SZWdpc3RlckZpbGUpOworICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29k
ZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2soKS0+
dGhpc1JlZ2lzdGVyKCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKClbbV9qaXQuZ3JhcGgo
KS5tX2FyZ3VtZW50c1tpXV0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKQEAgLTIyNTIsMTIxICsyMzAwLDEyOSBAQCBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWVSZWNvdmVyeSBTcGVj
dWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQsIGNvbnN0IFZh
bHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNv
bXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKIHsK
LSAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleEZvck9TUiAmJiBpc0ludDMyUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rp
b24ob3BlcmFuZCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJ
blJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5r
aW5kKCkpIHsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCi0gICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkpOworICAgICAgICAKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZp
bGU6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVB
c1VuYm94ZWRJbnQzMigpOworICAgICAgICAKKyAgICBjYXNlIEhhdmVOb2RlOiB7CisgICAgICAg
IGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFu
dCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOworICAgICAgICBpZiAo
IW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRp
bWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9w
ZXJhbmQsCisgICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2Ug
dGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICAKLSAgICBOb2Rl
KiBub2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOwotICAg
IGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAvLyBJdCdzIGxlZ2l0
aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBv
cGVyYW5kLAotICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhl
IEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgR2VuZXJhdGlvbkluZm8q
IGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07
Ci0gICAgaWYgKCFpbmZvUHRyLT5hbGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKSB7Ci0gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUg
aXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50
LgotICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAvLwot
ICAgICAgICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhl
IHZhbHVlIGlzIGEgVmFsdWVUb051bWJlciBub2RlCi0gICAgICAgIC8vICAgIHRoZW4gaXQgbWVh
bnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9y
bWVkIGEKLSAgICAgICAgLy8gICAgVmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdheS4gVGh1
cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051bWJlci4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVy
c2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdl
IGNhbiB1c2UgaXQuIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCi0gICAgICAg
IC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVU
b051bWJlciBiZWNhdXNlIGl0Ci0gICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5p
bmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKLSAgICAgICAgLy8g
ICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIEludDMyLgotICAgICAgICAvLwotICAg
ICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2
YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCi0gICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVt
YWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgot
ICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxk
IGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUg
aXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBv
ZgotICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBp
bnRlcm1lZGlhdGUuCi0gICAgICAgIAotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKLSAgICAgICAg
ICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgICAgICAgICAgaW5m
b1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAg
ICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09
IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZVRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0lu
dDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJ
bmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNp
emUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWluZm8uYWxpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQu
Z3JhcGgoKVtpbmZvLm5vZGVJbmRleCgpXTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVUb0RvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5m
by5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMklu
ZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgdWlu
dDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
IGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBp
cyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQu
CisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVy
c2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgICAgIC8v
ICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdv
dWxkIGhhdmUgcGVyZm9ybWVkIGEKKyAgICAgICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29u
dmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYg
dGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAgICAgICAg
ICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUg
aXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAgICAgLy8gICAgYW5kIGEgVmFsdWVUb051
bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQKKyAg
ICAgICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZl
IGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKKyAgICAgICAgICAgIC8vICAgIG90aGVycyB3b3Vs
ZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBp
cyBhIFVJbnQzMlRvTnVtYmVyCisgICAgICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFp
bmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAg
ICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMg
bm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisgICAgICAgICAgICAvLyAg
ICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJl
bWFpbmluZyB1c2VzIG9mCisgICAgICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZp
bmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9
PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBub2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0Lmdy
YXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlv
bkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgIGlmIChp
bmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdWludDMy
VG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5l
cmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2Rl
SW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9
IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9
IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJ
bmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJ
bmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRv
TnVtYmVySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRl
eDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQot
ICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7CisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlckluZGV4OworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKLSAgICAg
ICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOwotICAg
ICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFs
UmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYg
aW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9O
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2Rl
SW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9u
SW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRl
eFRvVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFm
b3VuZCkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVm
aW5lZCgpKTsKLSAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
fQogICAgIAotICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlu
Zm9QdHItPmFsaXZlKCkpOwogCi0gICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0g
RGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpp
bkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7Ci0gICAgfQotICAg
IGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICBp
ZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAg
ICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdw
cigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
aW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICB9CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNiAr
NjYsNTMgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9OwogCitlbnVtIFZhbHVlU291
cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5SZWdpc3RlckZpbGUsCisg
ICAgSW50MzJJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKwogY2xhc3MgVmFsdWVT
b3VyY2UgewogcHVibGljOgogICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25vZGVJbmRl
eChOb05vZGUpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQoU291cmNl
Tm90U2V0KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZh
bHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9k
ZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKICAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgIT0gU291cmNlTm90U2V0KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBIYXZlTm9k
ZSk7CiAgICAgfQogICAgIAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQogICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1
ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgIH0KICAgICAKICAgICBib29sIGlz
U2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7
CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCkgIT0gU291cmNl
Tm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpOwogICAg
IH0KICAgICAKICAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKICAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CiAg
ICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKICAgICB9CiAgICAgCkBAIC05NCw2ICsxMjEsMjAg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAgIHN0YXRpYyBOb2RlSW5kZXgg
bm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKKyAgICAgICAg
cmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJj
ZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUlu
ZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2Rl
KSkKKyAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBt
X25vZGVJbmRleDsKIH07CiAgICAgCkBAIC01NjksNyArNjEwLDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICAvLyBUcmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBob2xkaW5nIHRo
ZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQogICAgIC8vIG9wZXJhbmQtaW5kZXhl
ZCB2YXJpYWJsZXMuCi0KKyAgICAKICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJh
bmQoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG9wZXJhbmQpOwpAQCAtNjAyLDExICs2NDMsMTEgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JP
U1I7CiAgICAgCi0gICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQg
b3BlcmFuZCwgY29uc3QgVmFsdWVTb3VyY2UmKTsKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5
IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQsIHZhbHVlU291cmNlRm9yT3BlcmFu
ZChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1
ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KIH07CiAKQEAgLTgzMSw3ICs4NzIs
NyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgOiBKSVRD
b2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKICAgICAsIG1fY29tcGlsZU9rYXkodHJ1ZSkKICAgICAs
IG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQotICAgICwgbV92
YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhq
aXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBhY2tlZEludFZlY3Rvcl9oCisjZGVmaW5lIFBhY2tlZEludFZlY3Rvcl9oCisK
KyNpbmNsdWRlICJCaXRWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgY2xh
c3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIHdoZXJlIHRob3Nl
CisvLyBpbnRlZ2VycyBoYXZlIG9ubHkgYSBoYW5kZnVsIG9mIGJpdHMgZWFjaC4gSXQgaXMgbm90
IG1lYW50IHRvIGJlCisvLyBlZmZpY2llbnQgaW4gdGltZSwgYnV0IG9ubHkgaW4gc3BhY2UuIChU
aG91Z2ggbWFraW5nIGl0IGVmZmljaWVudAorLy8gaW4gdGltZSBmb3IgcG93ZXItb2YtMiB2YWx1
ZXMgb2YgYml0Q291bnQgd291bGQgbm90IGJlIGRpZmZpY3VsdC4pCisvLyBOb3RlIHRoYXQgdGhp
cyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGZvciBzaWduZWQgdHlwZXMsIGlmIHlvdQorLy8g
YXJlIHJlbHlpbmcgb24gdGhlIHNpZ24gYmVpbmcgcHJlc2VydmVkLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBiaXRDb3VudD4KK2NsYXNzIFBhY2tlZEludFZlY3RvciB7CitwdWJs
aWM6CisgICAgUGFja2VkSW50VmVjdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXRDb3Vu
dCk7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCA8IHNpemVvZih2b2lkKikgKiA4KTsKKyAgICB9
CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yKGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIp
CisgICAgICAgIDogbV9iaXRzKG90aGVyLm1fYml0cykKKyAgICB7CisgICAgfQorICAgIAorICAg
IFBhY2tlZEludFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFBhY2tlZEludFZlY3RvciYgb3RoZXIp
CisgICAgeworICAgICAgICBtX2JpdHMgPSBvdGhlci5tX2JpdHM7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYml0cy5zaXplKCkgLyBiaXRDb3VudDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBlbnN1cmVTaXplKHNpemVfdCBudW1JbnRzKQorICAgIHsKKyAgICAgICAgbV9iaXRzLmVuc3Vy
ZVNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXNpemUo
c2l6ZV90IG51bUludHMpCisgICAgeworICAgICAgICBtX2JpdHMucmVzaXplKG51bUludHMgKiBi
aXRDb3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAg
ICAgbV9iaXRzLmNsZWFyQWxsKCk7CisgICAgfQorICAgIAorICAgIFQgZ2V0KHNpemVfdCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBiaXRDb3VudDsgKytzdWJJbmRl
eCkgeworICAgICAgICAgICAgcmVzdWx0IDw8PSAxOworICAgICAgICAgICAgcmVzdWx0IHw9ICht
X2JpdHMuZ2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCkgPyAxIDogMCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHJlc3VsdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KHNpemVfdCBpbmRleCwgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIERv
IGFyaXRobWV0aWMgdXNpbmcgdWludHB0cl90LCBiZWNhdXNlICgxKSB3ZSBrbm93IHdoYXQgaXQg
aXMKKyAgICAgICAgLy8gKFQgbWlnaHQgYmUgYW4gZW51bSkgYW5kICgyKSBpdCdzIHRoZSBsYXJn
ZXN0IGludGVnZXIgdHlwZSB0aGF0CisgICAgICAgIC8vIGlzIGxpa2VseSB0byBwZXJmb3JtIGRl
Y2VudGx5IHdlbGwuCisgICAgICAgIHVpbnRwdHJfdCBteVZhbHVlID0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pih2YWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBQcmVsaW1pbmFyeSBzYW5pdHkg
Y2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgbm90IG91dCBvZiByYW5nZS4KKyAgICAgICAgQVNTRVJU
KChteVZhbHVlICYgbWFzaygpKSA9PSBteVZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3VudDsgc3ViSW5kZXgtLSA+IDA7KSB7CisgICAgICAg
ICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCwgISEobXlWYWx1ZSAm
IDEpKTsKKyAgICAgICAgICAgIG15VmFsdWUgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayB0aGF0IHdlIHN0b3JlZCB3aGF0IHRoZSB1c2Vy
IHRob3VnaHQgd2UKKyAgICAgICAgLy8gc3RvcmVkLgorICAgICAgICBBU1NFUlQoZ2V0KGluZGV4
KSA9PSB2YWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICAvLyBUaGlzIHJldHVybnMgdGhlIG1h
c2ssIGFuZCBpcyBjYXJlZnVsIHRvIG5vdCBzdGVwIG9uIHRoZSB3cmFwLWFyb3VuZAorICAgIC8v
IHNlbWFudGljcyBvZiB0aGUgc2hpZnQgYW1vdW50ICgxIDw8IDMyIGlzIDEgc2luY2UgMzIgd3Jh
cHMgdG8gMCkuIFRoZXJlCisgICAgLy8gaXMgdGhlIHNlcGFyYXRlIHF1ZXN0aW9uIG9mIHdoeSB5
b3Ugd291bGQgZXZlciB1c2UgdGhpcyB0byBzdG9yZSAzMi1iaXQKKyAgICAvLyBvciA2NC1iaXQg
dmFsdWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gaGF2ZSB0aGlzIHdvcmsgYXMgZXhw
ZWN0ZWQKKyAgICAvLyBpbiBzdWNoIHNpdHVhdGlvbnMgcmVnYXJkbGVzcy4KKyAgICBzdGF0aWMg
dWludHB0cl90IG1hc2soKSB7IHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCAo
Yml0Q291bnQgLSAxKSkgLSAxOyB9CisgICAgICAgICAgICAgICAKKyAgICAvLyBTdG9yZXMgaW50
ZWdlcnMgYml0IGJ5IGJpdCBpbiBiaWcgZW5kaWFuLgorICAgIEJpdFZlY3RvciBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYWNrZWRJbnRWZWN0b3I7CisK
KyNlbmRpZiAvLyBQYWNrZWRJbnRWZWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1VuaW9uRmluZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFVuaW9uRmluZF9oCisj
ZGVmaW5lIFVuaW9uRmluZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gQSBVbmlvbkZpbmQgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY29tcHV0
ZSBkaXNqb2ludCBzZXRzIHVzaW5nIHRoZQorLy8gZGlzam9pbnQtc2V0IGZvcmVzdCBkYXRhIHN0
cnVjdHVyZS4gRWFjaCBVbmlvbkZpbmQgaW5zdGFuY2UgaXMgYQorLy8gbm9kZSBpbiB0aGUgZm9y
ZXN0LiBUeXBpY2FsbHkgeW91IHVzZSBpdCBieSB1c2luZyBVbmlvbkZpbmQgYXMgYQorLy8gc3Vw
ZXJjbGFzczoKKy8vCisvLyBjbGFzcyBNZW1iZXJPZlNldDogcHVibGljIFVuaW9uRmluZDxNZW1i
ZXJPZlNldD4geyAuLi4gfQorLy8KKy8vIENhbGxpbmcgeC0+ZmluZCgpIGdpdmVzIHlvdSBhIE1l
bWJlck9mU2V0KiB0aGF0IHJlcHJlc2VudHMgdGhlCisvLyBkaXNqb2ludCBzZXQgdGhhdCB4IGJl
bG9uZ3MgdG8uIENhbGxpbmcgeC0+dW5pZnkoeSkgdW5pZmllcyB4J3MKKy8vIHNldCB3aXRoIHkn
cyBzZXQsIGFuZCBlbnN1cmVzIHRoYXQ6CisvLworLy8geC0+ZmluZCgpID09IHktPmZpbmQoKQor
Ly8KKy8vIGFuZCB0aGF0OgorLy8KKy8vIGEtPmZpbmQoKSA9PSBiLT5maW5kKCkKKy8vCisvLyBm
b3IgYW55IGEsIGIgaWYgcHJpb3IgdG8gdGhlIGNhbGwgdG8geC0+dW5pZnkoeSksIHdlIHdvdWxk
IGhhdmUKKy8vIGhhZDoKKy8vCisvLyBhLT5maW5kKCkgPT0geAorLy8gYi0+ZmluZCgpID09IHkK
Ky8vCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGFsbW9zdCBhbW9ydGl6ZWQgTygxKSwgYnV0
IGNvdWxkIGJlIHdvcnNlCisvLyBpbiB1bmxpa2VseSBwYXRob2xvZ2ljYWwgY2FzZXMuIEl0IGZh
dm9ycyBoYXZpbmcgYSBub24tcmVjdXJzaXZlCisvLyBzaW5nbGUgcGFzcyBpbXBsZW1lbnRhdGlv
biBvZiB1bmlmeSgpIGFuZCBmaW5kKCkgb3ZlciBlbnN1cmluZyB0aGUKKy8vIHRoZW9yZXRpY2Fs
IE8oSW52ZXJzZUFja2VybWFubltuXSkgYW1vcnRpemVkIGJvdW5kLCB3aGljaCBpcyBtdWNoCisv
LyBjbG9zZXIgdG8gYW1vcnRpemVkIE8oMSkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBVbmlvbkZpbmQgeworcHVibGljOgorICAgIFVuaW9uRmluZCgpCisgICAgICAgIDogbV9wYXJl
bnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFQqIGZpbmQoKQorICAgIHsKKyAgICAgICAg
VCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBUKiBuZXh0ID0gcmVz
dWx0LT5tX3BhcmVudDsKKyAgICAgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSB0aGlzKQor
ICAgICAgICAgICAgbV9wYXJlbnQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdW5pZnkoVCogb3RoZXIpCisgICAgeworICAgICAgICBUKiBh
ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5maW5kKCk7CisgICAgICAgIFQqIGIgPSBvdGhlci0+
ZmluZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFhLT5tX3BhcmVudCk7CisgICAgICAg
IEFTU0VSVCghYi0+bV9wYXJlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGEgPT0gYikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGEtPm1fcGFyZW50ID0gYjsKKyAg
ICB9Citwcml2YXRlOgorICAgIFQqIG1fcGFyZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VW5pb25GaW5kOworCisjZW5kaWYgLy8gVW5pb25GaW5kX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108964</attachid>
            <date>2011-09-27 22:31:31 -0700</date>
            <delta_ts>2011-09-27 22:57:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>liverangesplit_patch_12.diff</filename>
            <type>text/plain</type>
            <size>87697</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBA
CisyMDExLTA5LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
QWN0aW9uYWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJl
ZGljdGlvbnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rp
b25zOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJn
dW1lbnRVcHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6
OnBhY2spOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1By
ZWRpY3Rpb25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJv
Y2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElz
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlUmVjb3JkOjpzZXRGaXJzdFRp
bWUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6UGFja2VkSW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRJbnRWZWN0b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6
Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmdldCk6CisgICAgICAg
IChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVj
dG9yOjptYXNrKToKKyAgICAgICAgKiB3dGYvVW5pb25GaW5kLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmlvbkZpbmQ6OlVuaW9uRmluZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6Zmlu
ZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6dW5pZnkpOgorCiAyMDExLTA5LTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBzaG91bGQgc3Bl
Y3VsYXRlIG1vcmUgYWdncmVzc2l2ZWx5IG9uIHJlYWRzIG9mIGFycmF5Lmxlbmd0aApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzAsNiArMTQzMCwxMCBAQAogCQkJTmFtZT0iYnl0ZWNvZGUiCiAJCQk+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQWN0aW9uYWJsZVBy
ZWRpY3Rpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtOTQxLDYgKzk0MSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYWNrZWRJbnRWZWN0b3IuaCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFnZUFsbG9jYXRpb24uaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBACiAJCTBC
REZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6
ZUxpbWl0cy5jcHAgKi87IH07CisJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
NkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3
MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRW
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJCTBGNjM2
REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsgfTsKKwkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZBIC8q
IEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRp
Y3Rpb24uaCAqLzsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJ
MEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIy
IC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJC
MTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09N
UElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtNjUsNiArNjcs
NyBAQAogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgx
Q0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAq
LzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYg
LyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3Rl
ZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzk3LDggKzgwMCwxMCBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFz
dE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFs
bG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVj
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZEludFZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEg
LyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE0LDYgKzgx
OSw3IEBACiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJp
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIzMTQxMTVEMUEwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
YWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGll
cy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0
aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODIyLDcgKzE4MjgsOSBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkwRjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLywKKwkJ
CQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCisJCQkJMEY2MzZE
OUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAorCQkJCTBGMTZENzI0
MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5MTQyODA2
OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RD
MEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLApA
QCAtMjM1Myw2ICsyMzYxLDcgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVj
b2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYz
NkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkw
RkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4MzYsNyArMjg0
NSwxMCBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBBbGxvY2F0
aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEwMTQyRDI3RDcw
MEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM2REEy
MTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMzE1MSw2ICszMTYzLDcgQEAKIAkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAorCQkJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRD
b2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZG
MTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzYyLDcg
KzMzNzUsNiBAQAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhv
cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjA0RThC
MTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4
ODBGMUMxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGls
ZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIg
LyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlv
bmFibGVQcmVkaWN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWN0aW9uYWJs
ZVByZWRpY3Rpb25faAorI2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisKKyNpbmNsdWRl
ICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFja2VkSW50VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBBbiBhY3Rpb25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQg
b24gc3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcworLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4g
cGFzc2luZyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCisv
LyBpbiBDb2RlQmxvY2suCisKK2VudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24geworICAgIE5vQWN0
aW9uYWJsZVByZWRpY3Rpb24sCisgICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKKyAgICBFbmZv
cmNlQXJyYXlQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgorfTsKKwor
aW5saW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRp
Y3RlZFR5cGUoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rp
b247CisgICAgCisgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICByZXR1cm4gRW5mb3JjZUFycmF5UHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJl
ZGljdGlvbjsKKyAgICAKKyAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKK30KKwor
aW5saW5lIGJvb2wgdmFsdWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHZhbHVlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAg
IHN3aXRjaCAocHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKworICAgIGNhc2UgRW5mb3JjZUFycmF5
UHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7
CisKKyAgICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmlzQm9vbGVhbigpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQo
cHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitpbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25U
b1N0cmluZyhBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQoreworICAgIHN3aXRjaCAo
cHJlZGljdGlvbikgeworICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKKyAgICAgICAg
cmV0dXJuICJFbmZvcmNlSW50MzIiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VBcnJheVBy
ZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKKyAgICAgICAgCisgICAg
Y2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUJv
b2xlYW4iOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocHJlZGljdGlv
biA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uIjsKKyAgICB9Cit9CisKK3R5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlv
bmFibGVQcmVkaWN0aW9uLCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKKworY2xhc3Mg
QWN0aW9uYWJsZVByZWRpY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
bnMoKSB7IH0KKworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmVu
c3VyZVNpemUobnVtQXJndW1lbnRzKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShu
dW1WYXJpYWJsZXMpOworICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOworICAgICAgICBt
X3ZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50
KHVuc2lnbmVkIGFyZ3VtZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLnNldChhcmd1bWVudCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7
CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzLmdldChhcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VmFyaWFibGUodW5z
aWduZWQgdmFyaWFibGUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV92YXJpYWJsZXMuc2V0KHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcmlhYmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMu
Z2V0KHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
dmFyaWFibGVVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9
CisgICAgCisgICAgdm9pZCBwYWNrKCkKKyAgICB7CisgICAgICAgIHBhY2tWZWN0b3IobV9hcmd1
bWVudHMpOworICAgICAgICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25W
ZWN0b3ImIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24p
CisgICAgICAgICAgICAgICAgbGFzdFNldEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICB2
ZWN0b3IucmVzaXplKGxhc3RTZXRJbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25h
YmxlUHJlZGljdGlvblZlY3RvciBtX2FyZ3VtZW50czsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
blZlY3RvciBtX3ZhcmlhYmxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQWN0aW9uYWJsZVByZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw5ICsyNDAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsg
cmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc093blB0cjxDb2RlQmxv
Y2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgp
OyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFByZWRpY3Rpb25zKFBhc3NPd25QdHI8UHJl
ZGljdGlvblRyYWNrZXI+IHByZWRpY3Rpb25zKSB7IG1fcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
czsgfQotICAgICAgICBQcmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRpY3Rpb25zLmdldCgpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKTsKIApAQCAtOTc1LDggKzk3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgICAgIAotICAgICAgICBPd25Q
dHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7Ci0KICAgICAgICAgaW50MzJfdCBt
X2V4ZWN1dGVDb3VudGVyOwogICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tl
ci5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0aW9uVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsOSBAQAogCiAj
aW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gaGVscGVyIGZ1bmN0
aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlu
bGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5k
IDwgMDsgfQotCiBzdHJ1Y3QgUHJlZGljdGlvblNsb3QgewogcHVibGljOgogICAgIFByZWRpY3Rp
b25TbG90KCkKQEAgLTUwLDQ2ICs0Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIFByZWRpY3Rpb25UcmFja2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VmFyaWFibGVzKQotICAgICAgICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAg
LCBtX3ZhcmlhYmxlcyhudW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lk
IGluaXRpYWxpemVTaW1pbGFyVG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQotICAg
IHsKLSAgICAgICAgbV9hcmd1bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29weUxvY2Fsc0Zyb20oY29uc3QgUHJlZGljdGlvblRy
YWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMgPSBvdGhlci5tX2FyZ3Vt
ZW50czsKLSAgICAgICAgbV92YXJpYWJsZXMgPSBvdGhlci5tX3ZhcmlhYmxlczsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KLQot
ICAgIGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fYXJn
dW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAg
ewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpLCBw
cmVkaWN0aW9uKTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVz
LnNpemUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPj0gMCk7Ci0gICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVzW29wZXJhbmRdLm1fdmFs
dWUsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKICAgICBib29sIHByZWRpY3RHbG9iYWxWYXIo
dW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAgLTEwMiwyMCArNTgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUs
IHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIGdldEFyZ3VtZW50
UHJlZGljdGlvbih1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1thcmd1bWVudF0ubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBQcmVkaWN0ZWRUeXBlIGdl
dFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRQcmVkaWN0aW9u
KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpKTsKLSAgICAgICAgaWYgKCh1bnNpZ25l
ZClvcGVyYW5kIDwgbV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAg
ICB9Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2ln
bmVkIHZhck51bWJlcikKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rp
b25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEp
OwpAQCAtMTI1LDggKzY3LDYgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
VmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yPFByZWRp
Y3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGlj
dGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw3ICs4MywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc1BoaVN0YWNr
KCk7CiAgICAgLy8gQWRkIHNwaWxsIGxvY2F0aW9ucyB0byBub2Rlcy4KICAgICB2b2lkIGFsbG9j
YXRlVmlydHVhbFJlZ2lzdGVycygpOwotCisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBBU1NFUlQo
b3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiAm
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorICAgIAogICAgIC8v
IEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgog
ICAgIE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTE2LDcgKzEyNCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdo
ZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExv
Y2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlOwogCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTI5LDE2ICsxMzcsMjEgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20g
cHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRvIGNvdmVy
IHRoZXNlLgogICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1heChtX3ByZXNlcnZlZFZh
cnMsIG9wZXJhbmQgKyAxKTsKLQotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQ
aGkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIAorICAgICAg
ICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3Vy
cmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRl
eCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNB
dEhlYWRbb3BlcmFuZF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIAogICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9w
ZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5t
X2xvY2Fsc1tvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3Bl
cmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVt
ZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4K
QEAgLTE0NywyMCArMTYwLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJn
dW1lbnRzKTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzW2FyZ3VtZW50XS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CiAK
ICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQg
aW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCisgICAgICAgICAgICAgICAgLy8gdGhlIEdl
dExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5s
b2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4Owor
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChu
b2RlLm9wID09IFNldExvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAgICAgICBO
b2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRz
W2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2Rl
SW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhl
YWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFu
ZCwgTm9kZUluZGV4IHZhbHVlKQpAQCAtMTY4LDcgKzE5Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBv
cGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4K
QEAgLTY4OCw2ICs3MTYsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7CiAg
ICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJv
ZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCisgICAgLy8gdXMgdG8gdHJh
Y2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBh
c3NlZCwgYXMKKyAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0
bHkuCisgICAgaWYgKCFtX2N1cnJlbnRJbmRleCkgeworICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0
VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgIH0K
KyAgICB9CiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTQyMSwyMCArMTQ2MiwzNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAKICAgICAgICAgUHJl
ZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29y
czsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOworICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAg
ICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c1t2YXJOb10gOiBwcmVkZWNlc3NvckJs
b2NrLT5tX2xvY2Fsc1t2YXJOb107CisgICAgICAgICAgICBWYXJpYWJsZVJlY29yZCYgdmFyID0g
KHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRUYWlsW3Zh
ck5vXTsKIAogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52
YWx1ZTsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGkpOwotICAg
ICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSA6IHZhck5vKSkpOworICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJ
blByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1l
bnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1f
bG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKICAg
ICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJs
b2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgLy8g
R2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9u
bHkgbmVlZCB0aGUgdHdvCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZv
ciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NE
YXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBt
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3Rh
Y2spKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRh
Rm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+
dW5pZnkoZGF0YUZvclBoaSk7CiAKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFw
aFtlbnRyeS5tX3BoaV07CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKQEAg
LTE0NTIsOCArMTUwOSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gYWRkVG9HcmFwaChQaGksIE9w
SW5mbyhkYXRhRm9yUGhpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBoaU5vZGUgPSAm
bV9ncmFwaFtlbnRyeS5tX3BoaV07IC8vIHJlbG9hZCBhZnRlciB2ZWN0b3IgcmVzaXplCiAgICAg
ICAgICAgICBOb2RlJiBuZXdQaGlOb2RlID0gbV9ncmFwaFtuZXdQaGldOwpAQCAtMTUyMSw2ICsx
NTc4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHByb2Nlc3NQaGlTdGFj
azxBcmd1bWVudFBoaVN0YWNrPigpOwogICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
ID0gbV9wcmVzZXJ2ZWRWYXJzOworICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2Fs
czsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogCiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBlbnVtIENvbXBpbGVNb2Rl
IHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21wCiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEdyYXBoIGRmZyhjb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgIEdyYXBoIGRmZzsKICAg
ICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIApAQCAtNDcsMTUgKzQ3LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwg
c28gdGhhdCBPU1IgZW50cnkgY2FuIHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwotICAgIC8vIGFy
ZSBzYXZlZCBpbiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1Ig
ZW50cnksIHNpbmNlIHRoZQotICAgIC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5n
IG1heSBiZSByZXBsYWNlZCBhdCBhbnkgdGltZS4KLSAgICBPd25QdHI8UHJlZGljdGlvblRyYWNr
ZXI+IHByZWRpY3Rpb25zID0gYWRvcHRQdHIobmV3IFByZWRpY3Rpb25UcmFja2VyKCkpOwotICAg
ICpwcmVkaWN0aW9ucyA9IGRmZy5wcmVkaWN0aW9ucygpOwotICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9ucyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotICAgIAog
ICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsK
ICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VS
VChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM5IEBAIGNvbnN0IGNo
YXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3Ag
JiBOb2RlSWRNYXNrXTsKIH0KIAorY29uc3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlhYmxlQWNj
ZXNzRGF0YShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKK3sKKyAgICAv
LyBWYXJpYWJsZXMgYXJlIGFscmVhZHkgbnVtYmVyZWQuIEZvciByZWFkYWJpbGl0eSBvZiBJUiBk
dW1wcywgdGhpcyByZXR1cm5zCisgICAgLy8gYW4gYWxwaGFiZXRpYyBuYW1lIGZvciB0aGUgdmFy
aWFibGUgYWNjZXNzIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KKyAgICAvLyByZWFz
b24gYWJvdXQgdHdvIG51bWJlcnMgKHZhcmlhYmxlIG51bWJlciBhbmQgbGl2ZSByYW5nZSBudW1i
ZXIpLCBidXQgaW5zdGVhZAorICAgIC8vIGEgbnVtYmVyIGFuZCBhIGxldHRlci4KKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCZtX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChpbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIGlmICghaW5kZXgpCisgICAg
ICAgIHJldHVybiAiQSI7CisKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIEJvdW5kc0No
ZWNrZWRQb2ludGVyPGNoYXI+IHB0cihidWYsIHNpemVvZihidWYpKTsKKyAgICAKKyAgICB3aGls
ZSAoaW5kZXgpIHsKKyAgICAgICAgKnB0cisrID0gJ0EnICsgKGluZGV4ICUgMjYpOworICAgICAg
ICBpbmRleCAvPSAyNjsKKyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICBy
ZXR1cm4gYnVmOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpA
QCAtMTE2LDEyICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4
LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIi
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgIGludCBsb2NhbCA9IG5v
ZGUubG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSkKLSAgICAg
ICAgICAgIHByaW50ZigiJXNhcmcldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsIC0g
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcykiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwg
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwcmludGYoIiVzciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bG9jYWwpOworICAgICAgICAgICAgcHJpbnRmKCIlc3IldSglcykiLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBvcGVyYW5kLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAob3AgPT0g
SlNDb25zdGFudCkgewpAQCAtMTQ1LDggKzE4MCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBwcmludGYoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkg
ewotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQotICAgICAgICAgICAgcHJpbnRmKCIgIHBy
ZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAg
ICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcobm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5v
ZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIs
IHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzUHJlZGljdGlvbigpKQpAQCAtMjA0LDEw
ICsyMzksMTAgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQogdm9pZCBH
cmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBpZiAoZXhlYykgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1
bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX3By
ZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZB
cmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBt
X2FyZ3VtZW50cy5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgYXJnID0g
MTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKQotICAgICAgICAgICAgbV9wcmVkaWN0
aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3Vt
ZW50KGFyZyAtIDEpKSk7CisgICAgICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uRnJvbVZhbHVlKGV4ZWMtPmFyZ3VtZW50
KGFyZyAtIDEpKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2spOwpAQCAtMjIw
LDEwICsyNTUsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YQog
ICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKSk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
cHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9wcmVkaWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOworICAg
ICAgICBwcmludGYoIkFyZ3VtZW50IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRp
Y3Rpb25Ub1N0cmluZyhhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlz
dGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wg
b3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisK
IHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIAogLy8gRm9yIGV2ZXJ5IGxvY2FsIHZhcmlh
YmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KQEAgLTUz
LDYgKzU2LDEyIEBAIHN0cnVjdCBWYXJpYWJsZVJlY29yZCB7CiAgICAgICAgIDogdmFsdWUoTm9O
b2RlKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA9PSBOb05vZGUpOworICAg
ICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggdmFsdWU7CiB9
OwpAQCAtMTEwLDggKzExOSwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAgICwgYmVn
aW4oYmVnaW4pCiAgICAgICAgICwgZW5kKE5vTm9kZSkKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9s
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50
cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChudW1Mb2NhbHMpCisgICAgICAgICwgbV9hcmd1
bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxv
Y2FscykKICAgICB7CiAgICAgfQogCkBAIC0xMjYsOCArMTM3LDEyIEBAIHN0cnVjdCBCYXNpY0Js
b2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJl
ZGVjZXNzb3JzOwotICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzOwot
ICAgIFZlY3RvciA8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2FsczsKKyAgICAKKyAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOworICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOworICAgIAorICAgIFZlY3RvcjxWYXJpYWJs
ZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7CisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3Jk
LCAxNj4gbV9sb2NhbHNBdFRhaWw7CiB9OwogCiAvLyAKQEAgLTEzOCwxMSArMTUzLDYgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUg
dmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2Rl
LCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJndW1lbnRzLCBu
dW1WYXJpYWJsZXMpCi0gICAgewotICAgIH0KLQogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC0xNzEsMTYgKzE4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KICAgICAKLSAg
ICBQcmVkaWN0aW9uVHJhY2tlciYgcHJlZGljdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcHJlZGljdGlvbnM7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFu
ZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJl
ZGljdGlvbnMucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCiAgICAg
Ym9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdEds
b2JhbFZhcih2YXJOdW1iZXIsIHByZWRpY3Rpb24pOwpAQCAtMTkwLDExICsxOTAsMTIgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rp
b24pOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
IGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJu
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIo
bm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKQEAgLTIxMiwxMSArMjEzLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbihvcGVyYW5kKTsKLSAgICB9
Ci0gICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2lnbmVk
IHZhck51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLmdldEdsb2Jh
bFZhclByZWRpY3Rpb24odmFyTnVtYmVyKTsKQEAgLTI0NCw3ICsyNDAsMTAgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+bG9jYWwo
KSk7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAg
ICAgICAgICAgcmV0dXJuIGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFyTnVtYmVy
KCkpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CkBAIC0zMjQsNiArMzIzLDkgQEAgcHVibGljOgog
CiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUp
OworICAgIAorICAgIC8vIFRoaXMgaXMgTyhuKSwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHZlcmJvc2UgZHVtcHMuCisgICAgY29uc3QgY2hhciogbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRh
KFZhcmlhYmxlQWNjZXNzRGF0YSopOwogI2VuZGlmCiAKICAgICB2b2lkIHByZWRpY3RBcmd1bWVu
dFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMzMzLDcgKzMzNSwxMCBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4gbV9tZXRob2RDaGVja0RhdGE7CiAgICAg
VmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3Rv
cjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKKyAgICBWZWN0b3I8Tm9k
ZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKKyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nl
c3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgdW5zaWduZWQgbV9wcmVzZXJ2
ZWRWYXJzOworICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7CiBwcml2YXRlOgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw0MCArMzkz
LDIzIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50
cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNC
bG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJl
bCgpKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUFyZ3VtZW50ID0gMDsK
LSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVu
dHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rp
b25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChiYXNpY0Js
b2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBsYXN0TGl2
ZUxvY2FsID0gaTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2su
bV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5
cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsK
LSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1l
bnQgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0
TGl2ZUFyZ3VtZW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2Fy
Z3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xpdmVBcmd1bWVudHMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChsYXN0TGl2ZUxvY2FsKSB7Ci0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFy
aWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxvY2FsICsgMSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9s
aXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVMb2NhbDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0udmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNldChpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFy
QWxsKCk7CisgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5wYWNrKCk7CisgICAgICAgIAor
ICAgICAgICBlbnRyeS0+bV9wcmVkaWN0aW9ucyA9IGFjdGlvbmFibGVQcmVkaWN0aW9uczsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNpY0Jsb2NrKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KIAogLy8gRW1pdCB2YXJp
b3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcg
dGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAK
QEAgLTEwOCw2ICsxMDksNTEgQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5k
ZXg7CiB9OwogCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFy
aWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAg
ICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25l
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJlZGlj
dGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9j
YWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJh
bmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisg
ICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9u
LCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQs
IHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUg
c2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAg
ICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3Qg
ZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMg
ZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKIHR5cGVkZWYgdW5zaWduZWQgQXJpdGhO
b2RlRmxhZ3M7CiAjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwCiAjZGVmaW5lIE5vZGVV
c2VkQXNOdW1iZXIgICAweDAxCkBAIC0yMjMsNiArMjY5LDkgQEAgc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKICAgICBcCisgICAgLyogTWFya2VyIGZvciBhcmd1
bWVudHMgYmVpbmcgc2V0LiAqL1wKKyAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAorICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRB
bmQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdE9yLCBOb2RlUmVzdWx0SW50MzIp
IFwKQEAgLTQ1NiwxNSArNTA1LDMyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrKS5pc0Jvb2xlYW4o
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBj
YXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzTG9j
YWwoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IEdldExvY2FsIHx8IG9wID09IFNldExv
Y2FsOworICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgfQotCisg
ICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9v
cEluZm8pLT5maW5kKCk7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgp
CiAgICAgewotICAgICAgICBBU1NFUlQoaGFzTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiAoVmly
dHVhbFJlZ2lzdGVyKW1fb3BJbmZvOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPmxvY2FsKCk7CiAgICAgfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDIzICszNSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
aW5saW5lIGJvb2wgcHJlZGljdGlvbklzVmFsaWQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHR5cGUpCi17Ci0gICAgLy8gdGhpcyB0YWtlcyBp
bnRvIGFjY291bnQgb25seSBsb2NhbCB2YXJpYWJsZSBwcmVkaWN0aW9ucyB0aGF0IGdldCBlbmZv
cmNlZAotICAgIC8vIG9uIFNldExvY2FsLgotICAgIAotICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLSAgICAKLSAgICBpZiAo
aXNBcnJheVByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFs
RGF0YSwgdmFsdWUpOwotICAgIAotICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHR5cGUpKQot
ICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogI2lmIEVOQUJMRShERkdfT1NS
X0VOVFJZKQpAQCAtNjYsNyArNDksNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAjZW5kaWYKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVC
bG9jay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsK
QEAgLTk1LDI2ICs3NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNv
dXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRp
bWUuCiAgICAgCi0gICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zID0gYmFzZWxpbmVD
b2RlQmxvY2stPnByZWRpY3Rpb25zKCk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3Rpb25zLT5udW1i
ZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPCBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChp
KQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFy
Z3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1l
bnRVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVk
aWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnQoaSk7CisgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAoaSA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAt
IDEpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIHBy
ZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSk7
CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUg
aXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0
aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9mVmFyaWFibGVzKCk7ICsr
aSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCi0gICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGVVcHBlckJvdW5kKCk7ICsraSkgeworICAgICAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMu
dmFyaWFibGUoaSk7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRp
Y3Rpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
dWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1
ZSgpLCBwcmVkaWN0aW9uKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
ICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4
cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0
aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkp
OworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1
IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUo
KS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24p
KTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEyOSw3ICsx
MTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAg
ICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdygmZXhl
Yy0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBi
ZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuLlxuIik7CisgICAgICAgIHByaW50ZigiICAgIE9T
UiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgREZH
T1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlIDx3dGYvQml0VmVj
dG9yLmg+CisjaW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTM5LDggKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlE
YXRhIHsKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNo
aW5lQ29kZU9mZnNldDsKLSAgICBCaXRWZWN0b3IgbV9saXZlQXJndW1lbnRzOwotICAgIEJpdFZl
Y3RvciBtX2xpdmVWYXJpYWJsZXM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIG1fcHJlZGlj
dGlvbnM7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRl
eChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTks
MTQgKzMxOSwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdChtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ3Miw3ICs0NzIsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29udmVy
dFRoaXM6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0T2Jq
ZWN0VW5rbm93bik7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX3By
ZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pIHsK
KyAgICAgICAgICAgICAgICBpZiAocHJlZGljdGlvbiAmIH5QcmVkaWN0T2JqZWN0TWFzaykgewor
ICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uICY9IH5QcmVkaWN0T2JqZWN0TWFzazsKKyAg
ICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiB8PSBQcmVkaWN0T2JqZWN0VW5rbm93bjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24ocHJlZGljdGlvbik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC01NTksMTUgKzU2NiwxNiBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAg
IGNhc2UgRm9yY2VPU1JFeGl0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5n
LgotICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAg
Y2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNl
IGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAg
ICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsMjAgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogI2lmbmRlZiBOREVCVUcKIHZvaWQg
VmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAogewotICAgIGZwcmludGYob3V0LCAi
Tm9kZSglZCkiLCBtX25vZGVJbmRleCk7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNl
IFNvdXJjZU5vdFNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91
dCwgIkluUmVnRmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdpc3Rl
ckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9k
ZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIFZhbHVlUmVjb3Zlcnk6
OmR1bXAoRklMRSogb3V0KSBjb25zdApAQCAtMjAzLDkgKzIxNiw5IEBAIE9TUkV4aXQ6Ok9TUkV4
aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2gKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3Vt
ZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKG9wZXJhbmRGb3JBcmd1bWVudChhcmd1bWVudCksIGppdC0+bV9hcmd1bWVudHNb
YXJndW1lbnRdKTsKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3Zh
cmlhYmxlKQotICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKHZhcmlhYmxlLCBqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7CisgICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
aml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjk1
LDcgKzcwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbiA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkp
OworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0
aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAg
ICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKQEAgLTc3MCw3ICs3ODMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICB8
fCAoIW1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiAhbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpKTsKICAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgp
KTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CkBAIC03OTMs
OSArODA2LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgCiAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5
IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlh
YmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmls
ZS4KLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZSgpOworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQo
bm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
OwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6
CisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcDsgaXQganVzdCBtYXJrcyB0aGUgZmFjdCB0aGF0
IHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkLgorICAgICAgICAvLyBCdXQgaXQgbWF5IGJlIHBy
b2ZpdGFibGUgdG8gdXNlIHRoaXMgYXMgYSBob29rIHRvIHJ1biBzcGVjdWxhdGlvbiBjaGVja3MK
KyAgICAgICAgLy8gb24gYXJndW1lbnRzLCB0aGVyZWJ5IGFsbG93aW5nIHVzIHRvIHRyaXZpYWxs
eSBlbGltaW5hdGUgc3VjaCBjaGVja3MgaWYKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIG5v
dCB1c2VkLgorICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0
T3I6CkBAIC0xMzg3LDggKzE0MDcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0
aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5n
dGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBl
IGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIE5vZGUmIGJhc2VOb2RlID0g
bV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9
IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rp
b24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9j
YWwgfHwgIWlzQXJyYXlQcmVkaWN0aW9uKGJhc2VOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDaGVja0FycmF5KEAldSkgICAiLCBub2RlLmNoaWxkMSgpKTsK
KyNlbmRpZgogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKKyAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
IAogICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQg
YnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQpA
QCAtMTQyMiw4ICsxNDQ2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBw
cm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4K
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJh
eSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgogICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0
LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRM
b2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKGJh
c2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8
ICFpc0FycmF5UHJlZGljdGlvbihiYXNlTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpKSkgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ2hlY2tBcnJheUAldSAgICIsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlm
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkp
OworICAgICAgICB9CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHkudXNl
KCk7CkBAIC0xODQwLDcgKzE4NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChi
YXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgo
KS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKGJhc2VOb2Rl
Lm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihiYXNlTm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CkBAIC0yMTUzLDEwICsyMTgxLDI0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkg
PT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291
cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9k
ZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5z
aXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFk
W2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclBy
ZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKQEAgLTIyMjcsOSArMjI2OSwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAgICAgQVNT
RVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFt
ZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
KFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7
Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0
UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpW21faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0y
MjUyLDEyMSArMjMwMCwxMjkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3Vy
Y2UpCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCiB7Ci0gICAgaWYgKCF2YWx1ZVNvdXJj
ZS5pc1NldCgpKSB7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgaXNJbnQz
MlByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG9wZXJhbmQpKSkKLSAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94
ZWRJbnQzMigpOworICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uua2luZCgpKSB7CisgICAgY2FzZSBW
YWx1ZUluUmVnaXN0ZXJGaWxlOgogICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpKQotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsK
KyAgICAgICAgCisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAg
ICAgICAgCisgICAgY2FzZSBIYXZlTm9kZTogeworICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFu
dCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUlu
ZGV4KCkpKTsKKyAgICAKKyAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3Zh
bHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5l
cmF0ZSgpKSB7CisgICAgICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwg
bm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAorICAgICAgICAgICAg
Ly8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0
aGUgT1NSLgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgCi0gICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5n
cmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKLSAgICBpZiAoIW5vZGVQdHItPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4s
IG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKLSAgICAgICAgLy8g
ZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUg
T1NSLgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSk7Ci0gICAgfQotICAgIAotICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJh
dGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgIGlmICghaW5mb1B0ci0+
YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgo
KSkgewotICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2Rl
IHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KLSAgICAgICAgLy8gVGhlcmUg
YXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVmFsdWVUb051
bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9O
dW1iZXIgbm9kZQotICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmlu
ZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCi0gICAgICAgIC8vICAg
IFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRl
IFZhbHVlVG9OdW1iZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlr
ZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlz
Ci0gICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYg
dGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgotICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRv
TnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAot
ICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBj
b252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCi0gICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZl
IGNvbnZlcnRlZCB0byBJbnQzMi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVUludDMyVG9OdW1i
ZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051
bWJlcgotICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVz
IHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKLSAgICAgICAgLy8gICAgcmF0aGVy
IHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
cmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVy
LCBidXQgaXRzCi0gICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKLSAgICAgICAgLy8gICAgdGhl
IG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAg
ICAKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICBub2RlUHRyID0gJm1faml0
LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9u
SW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICBpZiAoaW5mb1B0
ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCi0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWZvdW5kKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9O
b2RlOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOwot
ICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsg
dmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lz
dGVyKSB7Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChp
bmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5k
ZXgoKV07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVUb051bWJlcjoKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMy
OgotICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBp
bmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9b
bm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICBpZiAoIWluZm9QdHItPmFsaXZl
KCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsK
KyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUg
dGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgorICAgICAgICAgICAgLy8gVGhl
cmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlz
IGEgVmFsdWVUb051bWJlciBub2RlCisgICAgICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRo
YXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBh
CisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVz
LCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBs
aXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50
MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50
MzIKKyAgICAgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVy
IGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAgICAgICAgICAvLyAgICBtZWFu
cyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVy
IHdoaWxlCisgICAgICAgICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8g
SW50MzIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElm
IHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgor
ICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0
aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAgICAgICAgICAvLyAgICByYXRo
ZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50
MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3Rp
bGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgorICAg
ICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50
ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7
CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1
YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBp
bmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5v
Tm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05v
ZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05v
ZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyAr
K3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRv
TnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXgg
PSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhU
b1VzZTsKLSAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAg
ICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OwotICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7Ci0gICAgICAgICAgICBlbHNl
IGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2Rl
SW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZh
bHVlVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJ
bmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFs
dWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJ
bmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWlu
dDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRvVXNlXTsKLSAgICAgICAgICAgICAgICBpbmZvUHRy
ID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgp
ID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAg
ICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVh
bFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUo
KSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgfQorICAg
ICAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICAKLSAgICBBU1NFUlQo
aW5mb1B0ci0+YWxpdmUoKSk7CisgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKIAot
ICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7Ci0g
ICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
Ci0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkp
OwotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGlu
Zm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOwotICAgIH0KLSAgICBpZiAoaW5mb1B0ci0+c3BpbGxG
b3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVy
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGlmIChpbmZvUHRyLT5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5KCk7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjYgKzY2LDUzIEBAIHByaXZhdGU6CiAg
ICAgR1BSUmVnIG1fc3JjOwogfTsKIAorZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJj
ZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZp
bGUsCisgICAgSGF2ZU5vZGUKK307CisKIGNsYXNzIFZhbHVlU291cmNlIHsKIHB1YmxpYzoKICAg
ICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgICAgICA6
IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVT
b3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZhbHVl
U291cmNlS2luZCkpCiAgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5vdFNl
dCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOwogICAgIH0KICAgICAKICAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgICAgICA6IG1f
bm9kZUluZGV4KG5vZGVJbmRleCkKICAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2
ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2UgZm9yUHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50
MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgICAgICByZXR1cm4ga2lu
ZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKKyAgICB9CisgICAg
CisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKICAgICB9CiAgICAgCiAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOwogICAgICAgICByZXR1cm4gbV9ub2Rl
SW5kZXg7CiAgICAgfQogICAgIApAQCAtOTQsNiArMTIxLDIwIEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZUluZGV4IG5vZGVJbmRleEZyb21LaW5kKFZh
bHVlU291cmNlS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPj0gU291cmNl
Tm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBOb05vZGUgLSBraW5k
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2VLaW5kIGtpbmRGcm9tTm9kZUlu
ZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBraW5kID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9kZSAtIG5vZGVJbmRleCk7CisgICAgICAgIGlmIChr
aW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1
cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+
KGtpbmQpOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiB9OwogICAg
IApAQCAtNTY5LDcgKzYxMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gVHJhY2tpbmcgZm9y
IHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50
cyBhbmQgYnl0ZWNvZGUKICAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgotCisgICAg
CiAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5k
KTsKQEAgLTYwMiwxMSArNjQzLDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGFzdFNldE9wZXJh
bmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOwogICAgIAotICAgIFZhbHVl
UmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQsIGNvbnN0IFZhbHVl
U291cmNlJik7CisgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25z
dCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihvcGVyYW5kLCB2YWx1ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9w
ZXJhbmQpKTsKICAgICB9CiB9OwogCkBAIC04MzEsNyArODcyLDcgQEAgaW5saW5lIFNwZWN1bGF0
aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRy
dWUpCiAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKLSAgICAsIG1fdmFyaWFibGVzKGppdC5jb2RlQmxv
Y2soKS0+bV9udW1WYXJzKQorICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZh
cnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJ
bnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tl
ZEludFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YWNrZWRJbnRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYWNrZWRJbnRW
ZWN0b3JfaAorI2RlZmluZSBQYWNrZWRJbnRWZWN0b3JfaAorCisjaW5jbHVkZSAiQml0VmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gY3Jl
YXRlIGFuIGFycmF5IG9mIGludGVnZXJzLCB3aGVyZSB0aG9zZQorLy8gaW50ZWdlcnMgaGF2ZSBv
bmx5IGEgaGFuZGZ1bCBvZiBiaXRzIGVhY2guIEl0IGlzIG5vdCBtZWFudCB0byBiZQorLy8gZWZm
aWNpZW50IGluIHRpbWUsIGJ1dCBvbmx5IGluIHNwYWNlLiAoVGhvdWdoIG1ha2luZyBpdCBlZmZp
Y2llbnQKKy8vIGluIHRpbWUgZm9yIHBvd2VyLW9mLTIgdmFsdWVzIG9mIGJpdENvdW50IHdvdWxk
IG5vdCBiZSBkaWZmaWN1bHQuKQorLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBhcyBl
eHBlY3RlZCBmb3Igc2lnbmVkIHR5cGVzLCBpZiB5b3UKKy8vIGFyZSByZWx5aW5nIG9uIHRoZSBz
aWduIGJlaW5nIHByZXNlcnZlZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgYml0
Q291bnQ+CitjbGFzcyBQYWNrZWRJbnRWZWN0b3IgeworcHVibGljOgorICAgIFBhY2tlZEludFZl
Y3RvcigpCisgICAgeworICAgICAgICBBU1NFUlQoYml0Q291bnQpOworICAgICAgICBBU1NFUlQo
Yml0Q291bnQgPCBzaXplb2Yodm9pZCopICogOCk7CisgICAgfQorICAgIAorICAgIFBhY2tlZElu
dFZlY3Rvcihjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0cyhv
dGhlci5tX2JpdHMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJbnRWZWN0b3ImIG9w
ZXJhdG9yPShjb25zdCBQYWNrZWRJbnRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9i
aXRzID0gb3RoZXIubV9iaXRzOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdHMuc2l6
ZSgpIC8gYml0Q291bnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlU2l6ZShzaXplX3Qg
bnVtSW50cykKKyAgICB7CisgICAgICAgIG1fYml0cy5lbnN1cmVTaXplKG51bUludHMgKiBiaXRD
b3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1JbnRzKQorICAg
IHsKKyAgICAgICAgbV9iaXRzLnJlc2l6ZShudW1JbnRzICogYml0Q291bnQpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyQWxsKCkKKyAgICB7CisgICAgICAgIG1fYml0cy5jbGVhckFsbCgp
OworICAgIH0KKyAgICAKKyAgICBUIGdldChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICB1aW50cHRyX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRl
eCA9IDA7IHN1YkluZGV4IDwgYml0Q291bnQ7ICsrc3ViSW5kZXgpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA8PD0gMTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSAobV9iaXRzLmdldChpbmRleCAqIGJp
dENvdW50ICsgc3ViSW5kZXgpID8gMSA6IDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3Qg
aW5kZXgsIFQgdmFsdWUpCisgICAgeworICAgICAgICAvLyBEbyBhcml0aG1ldGljIHVzaW5nIHVp
bnRwdHJfdCwgYmVjYXVzZSAoMSkgd2Uga25vdyB3aGF0IGl0IGlzCisgICAgICAgIC8vIChUIG1p
Z2h0IGJlIGFuIGVudW0pIGFuZCAoMikgaXQncyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHR5cGUgdGhh
dAorICAgICAgICAvLyBpcyBsaWtlbHkgdG8gcGVyZm9ybSBkZWNlbnRseSB3ZWxsLgorICAgICAg
ICB1aW50cHRyX3QgbXlWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgLy8gUHJlbGltaW5hcnkgc2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZhbHVl
IGlzIG5vdCBvdXQgb2YgcmFuZ2UuCisgICAgICAgIEFTU0VSVCgobXlWYWx1ZSAmIG1hc2soKSkg
PT0gbXlWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0g
Yml0Q291bnQ7IHN1YkluZGV4LS0gPiAwOykgeworICAgICAgICAgICAgbV9iaXRzLnNldChpbmRl
eCAqIGJpdENvdW50ICsgc3ViSW5kZXgsICEhKG15VmFsdWUgJiAxKSk7CisgICAgICAgICAgICBt
eVZhbHVlID4+PSAxOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbCBzYW5p
dHkgY2hlY2sgdGhhdCB3ZSBzdG9yZWQgd2hhdCB0aGUgdXNlciB0aG91Z2h0IHdlCisgICAgICAg
IC8vIHN0b3JlZC4KKyAgICAgICAgQVNTRVJUKGdldChpbmRleCkgPT0gdmFsdWUpOworICAgIH0K
K3ByaXZhdGU6CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBtYXNrLCBhbmQgaXMgY2FyZWZ1bCB0
byBub3Qgc3RlcCBvbiB0aGUgd3JhcC1hcm91bmQKKyAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIHNo
aWZ0IGFtb3VudCAoMSA8PCAzMiBpcyAxIHNpbmNlIDMyIHdyYXBzIHRvIDApLiBUaGVyZQorICAg
IC8vIGlzIHRoZSBzZXBhcmF0ZSBxdWVzdGlvbiBvZiB3aHkgeW91IHdvdWxkIGV2ZXIgdXNlIHRo
aXMgdG8gc3RvcmUgMzItYml0CisgICAgLy8gb3IgNjQtYml0IHZhbHVlcywgYnV0IGl0J3MgcHJv
YmFibHkgYmV0dGVyIHRvIGhhdmUgdGhpcyB3b3JrIGFzIGV4cGVjdGVkCisgICAgLy8gaW4gc3Vj
aCBzaXR1YXRpb25zIHJlZ2FyZGxlc3MuCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYXNrKCkgeyBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMikgPDwgKGJpdENvdW50IC0gMSkpIC0gMTsg
fQorICAgICAgICAgICAgICAgCisgICAgLy8gU3RvcmVzIGludGVnZXJzIGJpdCBieSBiaXQgaW4g
YmlnIGVuZGlhbi4KKyAgICBCaXRWZWN0b3IgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6UGFja2VkSW50VmVjdG9yOworCisjZW5kaWYgLy8gUGFja2VkSW50
VmVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBVbmlvbkZpbmRfaAorI2RlZmluZSBVbmlvbkZpbmRfaAor
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEg
VW5pb25GaW5kIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgZGlzam9pbnQgc2V0cyB1c2lu
ZyB0aGUKKy8vIGRpc2pvaW50LXNldCBmb3Jlc3QgZGF0YSBzdHJ1Y3R1cmUuIEVhY2ggVW5pb25G
aW5kIGluc3RhbmNlIGlzIGEKKy8vIG5vZGUgaW4gdGhlIGZvcmVzdC4gVHlwaWNhbGx5IHlvdSB1
c2UgaXQgYnkgdXNpbmcgVW5pb25GaW5kIGFzIGEKKy8vIHN1cGVyY2xhc3M6CisvLworLy8gY2xh
c3MgTWVtYmVyT2ZTZXQ6IHB1YmxpYyBVbmlvbkZpbmQ8TWVtYmVyT2ZTZXQ+IHsgLi4uIH0KKy8v
CisvLyBDYWxsaW5nIHgtPmZpbmQoKSBnaXZlcyB5b3UgYSBNZW1iZXJPZlNldCogdGhhdCByZXBy
ZXNlbnRzIHRoZQorLy8gZGlzam9pbnQgc2V0IHRoYXQgeCBiZWxvbmdzIHRvLiBDYWxsaW5nIHgt
PnVuaWZ5KHkpIHVuaWZpZXMgeCdzCisvLyBzZXQgd2l0aCB5J3Mgc2V0LCBhbmQgZW5zdXJlcyB0
aGF0OgorLy8KKy8vIHgtPmZpbmQoKSA9PSB5LT5maW5kKCkKKy8vCisvLyBhbmQgdGhhdDoKKy8v
CisvLyBhLT5maW5kKCkgPT0gYi0+ZmluZCgpCisvLworLy8gZm9yIGFueSBhLCBiIGlmIHByaW9y
IHRvIHRoZSBjYWxsIHRvIHgtPnVuaWZ5KHkpLCB3ZSB3b3VsZCBoYXZlCisvLyBoYWQ6CisvLwor
Ly8gYS0+ZmluZCgpID09IHgKKy8vIGItPmZpbmQoKSA9PSB5CisvLworLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyBhbG1vc3QgYW1vcnRpemVkIE8oMSksIGJ1dCBjb3VsZCBiZSB3b3JzZQorLy8g
aW4gdW5saWtlbHkgcGF0aG9sb2dpY2FsIGNhc2VzLiBJdCBmYXZvcnMgaGF2aW5nIGEgbm9uLXJl
Y3Vyc2l2ZQorLy8gc2luZ2xlIHBhc3MgaW1wbGVtZW50YXRpb24gb2YgdW5pZnkoKSBhbmQgZmlu
ZCgpIG92ZXIgZW5zdXJpbmcgdGhlCisvLyB0aGVvcmV0aWNhbCBPKEludmVyc2VBY2tlcm1hbm5b
bl0pIGFtb3J0aXplZCBib3VuZCwgd2hpY2ggaXMgbXVjaAorLy8gY2xvc2VyIHRvIGFtb3J0aXpl
ZCBPKDEpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVW5pb25GaW5kIHsKK3B1Ymxp
YzoKKyAgICBVbmlvbkZpbmQoKQorICAgICAgICA6IG1fcGFyZW50KDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBUKiBmaW5kKCkKKyAgICB7CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRpY19j
YXN0PFQqPih0aGlzKTsKKyAgICAgICAgVCogbmV4dCA9IHJlc3VsdC0+bV9wYXJlbnQ7CisgICAg
ICAgIHdoaWxlIChuZXh0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXh0OworICAgICAgICAg
ICAgbmV4dCA9IHJlc3VsdC0+bV9wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJl
c3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gdGhpcykKKyAgICAgICAgICAgIG1fcGFyZW50
ID0gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lk
IHVuaWZ5KFQqIG90aGVyKQorICAgIHsKKyAgICAgICAgVCogYSA9IHN0YXRpY19jYXN0PFQqPih0
aGlzKS0+ZmluZCgpOworICAgICAgICBUKiBiID0gb3RoZXItPmZpbmQoKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVCghYS0+bV9wYXJlbnQpOworICAgICAgICBBU1NFUlQoIWItPm1fcGFyZW50
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBhLT5tX3BhcmVudCA9IGI7CisgICAgfQorcHJpdmF0ZToKKyAgICBU
KiBtX3BhcmVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlVuaW9u
RmluZDsKKworI2VuZGlmIC8vIFVuaW9uRmluZF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108968</attachid>
            <date>2011-09-27 22:57:38 -0700</date>
            <delta_ts>2011-09-28 22:14:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>liverangesplit_patch_13.diff</filename>
            <type>text/plain</type>
            <size>85454</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxOTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBA
CisyMDExLTA5LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
QWN0aW9uYWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJl
ZGljdGlvbnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rp
b25zOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJn
dW1lbnRVcHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6
OnBhY2spOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1By
ZWRpY3Rpb25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJv
Y2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElz
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlUmVjb3JkOjpzZXRGaXJzdFRp
bWUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhY2tlZElu
dFZlY3Rvcjo6UGFja2VkSW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRJbnRWZWN0b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6
Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OmdldCk6CisgICAgICAg
IChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVj
dG9yOjptYXNrKToKKyAgICAgICAgKiB3dGYvVW5pb25GaW5kLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmlvbkZpbmQ6OlVuaW9uRmluZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6Zmlu
ZCk6CisgICAgICAgIChXVEY6OlVuaW9uRmluZDo6dW5pZnkpOgorCiAyMDExLTA5LTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBjYW5ub3QgY29t
cGlsZSBvcF9uZXdfb2JqZWN0LCBvcF9uZXdfYXJyYXksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24g
OTYxOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQz
MCw2ICsxNDMwLDEwIEBACiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29k
ZVxDb2RlQmxvY2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZj
cHJvagkocmV2aXNpb24gOTYxOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsNiArOTQx
LDEwIEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
d3RmXFBhY2tlZEludFZlY3Rvci5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYWdlQWxsb2NhdGlvbi5oIgogCQkJPgogCQk8L0ZpbGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTYxOTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksMTAgQEAKIAkJMEJERkZBRTAwRkM2MTkyOTAw
RDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3Nz
VGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFE
MTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4
NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsg
fTsKKwkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEyMDBD
Rjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRD
IC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNEU4QTE0MkQ2OTY5
MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKKwkJMEY2MzZEQTAxNDJEMjdENzAwQjJF
NjZBIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rv
ci5oICovOyB9OworCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRp
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovOyB9Owog
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2M0IyNzEzRjc1M0JC
MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICIt
Zm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CkBAIC02NSw2ICs2Nyw3IEBACiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQz
QzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgy
ODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJp
dmVyLmggKi87IH07CisJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDUyQUFDMTQz
MDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwogCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTM3MTQxQUIx
NDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBQ
cmVkaWN0ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03OTcsOCArODAwLDEw
IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3Nz
VGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9z
c1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJGMjhB
MjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYwNEU4QTE0
MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFj
a1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTQsNiArODE5LDcgQEAKIAkJMEZEM0M4
MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3Bh
Z2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvcGFn
YXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9
IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDUy
QUFDMTQzMDM1OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5pb25GaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFi
aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUzNzE0MUFCMTQy
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4MjIsNyArMTgyOCw5IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNjA0RThB
MTQyRDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovLAorCQkJCTBGRDUyQUFDMTQzMDM1
OUQwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCAqLywKKwkJCQkwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2
NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi8sCisJCQkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRB
IC8qIEJpdFZlY3Rvci5jcHAgKi8sCiAJCQkJMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJp
dFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovLAog
CQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCkBAIC0yMzUzLDYgKzIzNjEs
NyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjM2REExMTQyRDI3RUQwMEIy
RTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovLAogCQkJCTBGRDgyRThFMTQyMDdBNTEw
MDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3
OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5oICovLApAQCAtMjgzNiw3ICsyODQ1LDEwIEBACiAJCQkJMUEw
ODI3N0ExNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDU2QjAxNDI3RkI5MTAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTAxNDJEMjdENzAwQjJFNjZBIC8qIFBhY2tl
ZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZB
IC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzUyMUUxMzE0
MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZENTJBQUUx
NDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4ODBG
MUUxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CkBAIC0zMTUxLDYgKzMxNjMsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7
CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEYx
NkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJl
ZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjIsNyArMzM3NSw2IEBACiAJCQkJ
MUEwODI3NzkxNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzA0NTZCMTE0MjdGQjk1MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY2MDRFOEIxNDJENjk2RDAwOUNFQjky
IC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxQzE0MzI4QkI5MDBC
MDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2ODgwRjFEMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcjMyXzY0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCisj
ZGVmaW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKKworI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNp
bmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYWNrZWRJbnRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFuIGFjdGlv
bmFibGUgcHJlZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNlZCBvbiBzdG9yZXMgdG8gbG9j
YWwgdmFyaWFibGVzCisvLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hlbiBwYXNzaW5nIGFyZ3VtZW50
cyB0byBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQKKy8vIGluIENvZGVCbG9jay4K
KworZW51bSBBY3Rpb25hYmxlUHJlZGljdGlvbiB7CisgICAgTm9BY3Rpb25hYmxlUHJlZGljdGlv
biwKKyAgICBFbmZvcmNlSW50MzJQcmVkaWN0aW9uLAorICAgIEVuZm9yY2VBcnJheVByZWRpY3Rp
b24sCisgICAgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCit9OworCitpbmxpbmUgQWN0aW9uYWJs
ZVByZWRpY3Rpb24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24pCit7CisgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGljdGlvbjsKKyAgICAKKyAgICBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNl
QXJyYXlQcmVkaWN0aW9uOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOworICAgIAor
ICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOworfQorCitpbmxpbmUgYm9vbCB2YWx1
ZU9iZXlzUHJlZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUs
IEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVkaWN0
aW9uKSB7CisgICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4g
dmFsdWUuaXNJbnQzMigpOworCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOgorICAg
ICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKKworICAgIGNhc2UgRW5m
b3JjZUJvb2xlYW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09IE5v
QWN0aW9uYWJsZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisK
K2lubGluZSBjb25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKEFjdGlvbmFi
bGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCit7CisgICAgc3dpdGNoIChwcmVkaWN0aW9uKSB7Cisg
ICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VJ
bnQzMiI7CisgICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKKyAgICAg
ICAgcmV0dXJuICJFbmZvcmNlQXJyYXkiOworICAgICAgICAKKyAgICBjYXNlIEVuZm9yY2VCb29s
ZWFuUHJlZGljdGlvbjoKKyAgICAgICAgcmV0dXJuICJFbmZvcmNlQm9vbGVhbiI7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJs
ZVByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gIk5vQWN0aW9uYWJsZVByZWRpY3Rpb24iOwor
ICAgIH0KK30KKwordHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0aW9uYWJsZVByZWRpY3Rpb24s
IDI+IEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yOworCitjbGFzcyBBY3Rpb25hYmxlUHJlZGlj
dGlvbnMgeworcHVibGljOgorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucygpIHsgfQorCisgICAg
QWN0aW9uYWJsZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5zdXJlU2l6ZShudW1Bcmd1
bWVudHMpOworICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXplKG51bVZhcmlhYmxlcyk7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmNsZWFyQWxsKCk7CisgICAgICAgIG1fdmFyaWFibGVzLmNsZWFy
QWxsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnQodW5zaWduZWQgYXJndW1l
bnQsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVu
dHMuc2V0KGFyZ3VtZW50LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVk
aWN0aW9uIGFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGFy
Z3VtZW50ID49IG1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb0FjdGlv
bmFibGVQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMuZ2V0KGFyZ3VtZW50
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRWYXJpYWJsZSh1bnNpZ25lZCB2YXJpYWJsZSwg
QWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBtX3ZhcmlhYmxlcy5z
ZXQodmFyaWFibGUsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRpY3Rp
b24gdmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUpCisgICAgeworICAgICAgICBpZiAodmFyaWFi
bGUgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vQWN0aW9uYWJs
ZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlcy5nZXQodmFyaWFibGUpOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVyQm91bmQoKSBjb25zdCB7IHJl
dHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCB2YXJpYWJsZVVwcGVyQm91
bmQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAKKyAgICB2b2lk
IHBhY2soKQorICAgIHsKKyAgICAgICAgcGFja1ZlY3RvcihtX2FyZ3VtZW50cyk7CisgICAgICAg
IHBhY2tWZWN0b3IobV92YXJpYWJsZXMpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3Rh
dGljIHZvaWQgcGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0gMDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYg
KHZlY3Rvci5nZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgICAg
ICBsYXN0U2V0SW5kZXggPSBpOworICAgICAgICB9CisgICAgICAgIHZlY3Rvci5yZXNpemUobGFz
dFNldEluZGV4ICsgMSk7CisgICAgfQorICAgIAorICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVj
dG9yIG1fYXJndW1lbnRzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yIG1fdmFyaWFi
bGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBY3Rpb25hYmxlUHJl
ZGljdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiA5NjE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDkgKzI0MCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5h
dGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVy
bmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4g
cHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zOyB9Ci0gICAgICAgIFBy
ZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGljdGlv
bnMuZ2V0KCk7IH0KLQogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCkBAIC05
NzUsOCArOTcyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgT3duUHRyPENvZGVCbG9j
az4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJh
Y2tlcj4gbV9wcmVkaWN0aW9uczsKLQogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7
CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKICAgICAgICAg
dWludDMyX3QgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDk2
MTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCw5IEBACiAKICNpbmNsdWRlICJQcmVkaWN0
ZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vp
c2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJvb2wgb3BlcmFu
ZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9Ci0KIHN0cnVj
dCBQcmVkaWN0aW9uU2xvdCB7CiBwdWJsaWM6CiAgICAgUHJlZGljdGlvblNsb3QoKQpAQCAtNTAs
NDYgKzQ2LDYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGlvblRy
YWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCi0gICAg
ICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fdmFyaWFibGVzKG51
bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZVNpbWls
YXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0gICAgewotICAgICAgICBtX2Fy
Z3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIG1fdmFy
aWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0g
ICAgewotICAgICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRzOwotICAgICAgICBt
X3ZhcmlhYmxlcyA9IG90aGVyLm1fdmFyaWFibGVzOwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qg
bnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0K
LSAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxl
cy5zaXplKCk7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChp
bnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQotCi0gICAgYm9vbCBwcmVkaWN0
QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRd
Lm1fdmFsdWUsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50
IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0QXJn
dW1lbnQoYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCksIHByZWRpY3Rpb24pOwotICAg
ICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQob3BlcmFuZCA+PSAwKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnJl
c2l6ZShvcGVyYW5kICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBt
ZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZSwgcHJlZGljdGlvbik7
Ci0gICAgfQotICAgIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1i
ZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5k
KHZhck51bWJlciArIDEpOwpAQCAtMTAyLDIwICs1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgcHJlZGljdGlvbik7CiAg
ICAgfQogICAgIAotICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2ln
bmVkIGFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50
XS5tX3ZhbHVlOwotICAgIH0KLQotICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQg
b3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkK
LSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZv
ck9wZXJhbmQob3BlcmFuZCkpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3Zh
cmlhYmxlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0u
bV92YWx1ZTsKLSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIH0KLSAgICAKICAgICBQ
cmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQog
ICAgIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRv
ciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CkBAIC0xMjUsOCArNjcs
NiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UHJlZGljdGlv
blNsb3QsIDE2PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBt
X3ZhcmlhYmxlczsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9nbG9i
YWxWYXJzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk2MTkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgz
LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzUGhpU3RhY2soKTsKICAgICAvLyBBZGQg
c3BpbGwgbG9jYXRpb25zIHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0
ZXJzKCk7Ci0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4ob3BlcmFuZCkpKTsKKyAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLmxhc3QoKTsKKyAgICB9CisgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3Bl
cmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCiAgICAgTm9kZUluZGV4IGdl
dChpbnQgb3BlcmFuZCkKICAgICB7CkBAIC0xMTYsNyArMTI0LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNbb3BlcmFuZF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWU7CiAKICAgICAg
ICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW25vZGVJbmRleF07CkBAIC0xMjksMTYgKzEzNywyMSBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCiAg
ICAgICAgIC8vIGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCiAgICAgICAg
IG1fcHJlc2VydmVkVmFycyA9IHN0ZDo6bWF4KG1fcHJlc2VydmVkVmFycywgb3BlcmFuZCArIDEp
OwotCi0gICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgIAor
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBwaGkg
PSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBt
X2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwg
b3BlcmFuZCkpOwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcElu
Zm8ob3BlcmFuZCksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc1tvcGVy
YW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAg
ICAgICAgCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVyYW5kXS5z
ZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5k
ZXg7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZUluZGV4
IHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJhbmRd
LnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IGFk
ZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkp
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwg
YWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50LgpAQCAtMTQ3LDIwICsxNjAs
MzUgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJn
dW1lbnRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZTsKIAogICAgICAgICBpZiAobm9k
ZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNldEFyZ3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFz
aWMgYmxvY2s7IGxpbmsKKyAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNl
dEFyZ3VtZW50LgorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3Vt
ZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9j
YWwpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogCi0gICAgICAgIE5vZGVJbmRleCBwaGkgPSBh
ZGRUb0dyYXBoKFBoaSk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2su
YXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKLSAg
ICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG9wZXJhbmQpLCBw
aGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNbYXJndW1lbnRdLnZhbHVl
ID0gbm9kZUluZGV4OworICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAg
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0
Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4
OwogICAgIH0KICAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFs
dWUpCkBAIC0xNjgsNyArMTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1B
cmd1bWVudHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1bWVu
dF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1
ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQsIGFuZCBwZXJm
b3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgpAQCAtNjg4LDYgKzcxNiwx
OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKICAgICAgICAg
ICAgIG1fY29uc3RhbnRzW2ldID0gQ29uc3RhbnRSZWNvcmQoKTsKICAgICB9CisgICAgCisgICAg
Ly8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMgZm9y
IGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKKyAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBvZiBh
biBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcworICAgIC8v
IG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KKyAgICBpZiAoIW1f
Y3VycmVudEluZGV4KSB7CisgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVt
QXJndW1lbnRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBz
ZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVu
dF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CiAgICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CkBAIC0xNDQ4LDIwICsxNDg5LDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHBy
ZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNp
Z25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
ZGF0YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwogCi0gICAgICAgICAgICBWYXJpYWJsZVJl
Y29yZCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29y
QmxvY2stPm1fYXJndW1lbnRzW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzW3Zh
ck5vXTsKKyAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFy
Z3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbdmFy
Tm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFyTm9dOwogCiAgICAgICAg
ICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFyLnZhbHVlOwogICAgICAgICAg
ICAgaWYgKHZhbHVlSW5QcmVkZWNlc3NvciA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICB2
YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSk7Ci0gICAgICAgICAgICAgICAgdmFy
LnZhbHVlID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVk
ZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0
YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gdmFyTm8gLSBtX2NvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIDogdmFyTm8pKSk7
CisgICAgICAgICAgICAgICAgdmFyLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOwor
ICAgICAgICAgICAgICAgIGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykKKyAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbdmFyTm9d
LnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdEhlYWRbdmFy
Tm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIHBo
aVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVk
ZWNlc3NvciwgdmFyTm8pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBp
ZGVudGljYWwgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBhbmQgaXRz
IGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRoZSB0d28K
KyAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVuY3ksIHdl
IHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscworICAgICAgICAgICAgICAgIC8v
IGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMg
cG9zc2libGUuCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBtX2dyYXBoW21fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5jaGlsZDEoKV0udmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5jaGlsZDEoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5Q
cmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
Lm9wID09IFBoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBT
ZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9
IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhp
KTsKIAogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsK
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQpAQCAtMTQ3OSw4ICsxNTM2LDgg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5v
ZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dyYXBoKFBoaSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBuZXdQaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKGRhdGFGb3JQaGkp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1f
cGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZlY3RvciByZXNpemUKICAgICAgICAgICAgIE5vZGUmIG5l
d1BoaU5vZGUgPSBtX2dyYXBoW25ld1BoaV07CkBAIC0xNTQ4LDYgKzE2MDUsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3Rh
Y2s+KCk7CiAgICAgCiAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZh
cnM7CisgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgu
bV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiAKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDk2
MTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rp
b24sIENvbXAKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4
ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdp
dGhBcml0eUNoZWNrKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBj
b2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgR3JhcGggZGZnOwogICAgIGlmICghcGFyc2UoZGZn
LCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBA
IC00NywxNSArNDcsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVN
CiAgICAgCiAgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKICAgICAK
LSAgICAvLyBTYXZlIHRoZSBwcmVkaWN0aW9ucyB3ZSd2ZSBtYWRlLCBzbyB0aGF0IE9TUiBlbnRy
eSBjYW4gdmVyaWZ5IHRoZW0uIFByZWRpY3Rpb25zCi0gICAgLy8gYXJlIHNhdmVkIGluIHRoZSBD
b2RlQmxvY2sgZnJvbSB3aGljaCB3ZSB3aWxsIGJlIGRvaW5nIE9TUiBlbnRyeSwgc2luY2UgdGhl
Ci0gICAgLy8gQ29kZUJsb2NrIHRvIHdoaWNoIHdlIGFyZSBPU1JpbmcgbWF5IGJlIHJlcGxhY2Vk
IGF0IGFueSB0aW1lLgotICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMg
PSBhZG9wdFB0cihuZXcgUHJlZGljdGlvblRyYWNrZXIoKSk7Ci0gICAgKnByZWRpY3Rpb25zID0g
ZGZnLnByZWRpY3Rpb25zKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnNldFBy
ZWRpY3Rpb25zKHByZWRpY3Rpb25zLnJlbGVhc2UoKSk7Ci0gICAgCiAgICAgSklUQ29tcGlsZXIg
ZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwogICAgIGlmIChjb21waWxl
TW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGppdENvZGVXaXRoQXJp
dHlDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gOTYxOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMzkgQEAgY29uc3QgY2hhciAqR3JhcGg6Om9wTmFt
ZShOb2RlVHlwZSBvcCkKICAgICByZXR1cm4gZGZnT3BOYW1lc1tvcCAmIE5vZGVJZE1hc2tdOwog
fQogCitjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKQoreworICAgIC8vIFZhcmlhYmxlcyBhcmUg
YWxyZWFkeSBudW1iZXJlZC4gRm9yIHJlYWRhYmlsaXR5IG9mIElSIGR1bXBzLCB0aGlzIHJldHVy
bnMKKyAgICAvLyBhbiBhbHBoYWJldGljIG5hbWUgZm9yIHRoZSB2YXJpYWJsZSBhY2Nlc3MgZGF0
YSwgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0bworICAgIC8vIHJlYXNvbiBhYm91dCB0d28gbnVt
YmVycyAodmFyaWFibGUgbnVtYmVyIGFuZCBsaXZlIHJhbmdlIG51bWJlciksIGJ1dCBpbnN0ZWFk
CisgICAgLy8gYSBudW1iZXIgYW5kIGEgbGV0dGVyLgorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoJm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldID09IHZhcmlhYmxlQWNjZXNzRGF0YSkgewor
ICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQVNTRVJUKGluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSk7CisgICAgCisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuICJBIjsK
KworICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMF07CisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hh
cj4gcHRyKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIAorICAgIHdoaWxlIChpbmRleCkgeworICAg
ICAgICAqcHRyKysgPSAnQScgKyAoaW5kZXggJSAyNik7CisgICAgICAgIGluZGV4IC89IDI2Owor
ICAgIH0KKyAgICAKKyAgICAqcHRyKysgPSAwOworICAgIAorICAgIHJldHVybiBidWY7Cit9CisK
IHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC0xMTYsMTIgKzE0OSwx
NCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgICAg
ICBwcmludGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQotICAgIGlmIChu
b2RlLmhhc0xvY2FsKCkpIHsKLSAgICAgICAgaW50IGxvY2FsID0gbm9kZS5sb2NhbCgpOwotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQobG9jYWwpKQotICAgICAgICAgICAgcHJpbnRmKCIl
c2FyZyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbG9jYWwgLSBjb2RlQmxvY2stPnRoaXNS
ZWdpc3RlcigpKTsKKyAgICBBU1NFUlQobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBu
b2RlLmhhc0xvY2FsKCkpOworICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KQorICAgICAgICAgICAgcHJpbnRmKCIlc2FyZyV1KCVzKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIG9wZXJhbmQgLSBjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLCBuYW1lT2ZWYXJpYWJsZUFj
Y2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHByaW50ZigiJXNyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBsb2NhbCk7CisgICAgICAg
ICAgICBwcmludGYoIiVzciV1KCVzKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG9wZXJhbmQs
IG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CkBA
IC0xNDUsOCArMTgwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBD
bwogICAgIHByaW50ZigiKSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7Ci0gICAgICAgIGlmIChu
b2RlLmhhc0xvY2FsKCkpCi0gICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHBy
ZWRpY3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpKTsKKyAgICAgICAg
aWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBwcmludGYoIiAg
cHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5oYXNWYXJOdW1iZXIo
KSkKICAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3Ry
aW5nKGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSkpKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZS5oYXNQcmVkaWN0aW9uKCkpCkBAIC0yMDQsMTAgKzIzOSwxMCBAQCB2b2lk
IEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiB2b2lkIEdyYXBoOjpwcmVkaWN0QXJn
dW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IGlmIChleGVjKSB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWlu
KGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fcHJlZGljdGlvbnMubnVtYmVy
T2ZBcmd1bWVudHMoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6
bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRzLnNpemUo
KSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJP
ZkFyZ3VtZW50czsgKythcmcpCi0gICAgICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1
bWVudChhcmcsIHByZWRpY3Rpb25Gcm9tVmFsdWUoZXhlYy0+YXJndW1lbnQoYXJnIC0gMSkpKTsK
KyAgICAgICAgICAgIGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0KHByZWRpY3Rpb25Gcm9tVmFsdWUoZXhlYy0+YXJndW1lbnQoYXJnIC0gMSkpKTsKICAg
ICB9CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC0yMjAsMTAgKzI1NSwxMCBAQCB2
b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAgICAgICAgIGlmICghcHJv
ZmlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgbV9wcmVkaWN0
aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKSk7CisgICAgICAgIGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKICAgICAgICAg
CiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkFyZ3VtZW50
IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRp
Y3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7CisgICAgICAgIHByaW50ZigiQXJn
dW1lbnQgWyVsdV0gcHJlZGljdGlvbjogJXNcbiIsIGFyZywgcHJlZGljdGlvblRvU3RyaW5nKGF0
KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICNlbmRpZgogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDk2MTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFt
ZXNwYWNlIERGRyB7CiAKKy8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYg
dGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVu
dChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KKwogdHlwZWRlZiB1aW50MzJf
dCBCbG9ja0luZGV4OwogCiAvLyBGb3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgd2UgdHJhY2sgYW55
IGV4aXN0aW5nIGdldCBvciBzZXQgb2YgdGhlIHZhbHVlLgpAQCAtNTMsNiArNTYsMTIgQEAgc3Ry
dWN0IFZhcmlhYmxlUmVjb3JkIHsKICAgICAgICAgOiB2YWx1ZShOb05vZGUpCiAgICAgewogICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7CisgICAgICAgIHZhbHVlID0gbm9k
ZUluZGV4OworICAgIH0KIAogICAgIE5vZGVJbmRleCB2YWx1ZTsKIH07CkBAIC0xMTAsOCArMTE5
LDEwIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICAgICAgLCBiZWdpbihiZWdpbikKICAgICAg
ICAgLCBlbmQoTm9Ob2RlKQogICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAs
IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2FscyhudW1Mb2NhbHMp
CisgICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1f
bG9jYWxzQXRIZWFkKG51bUxvY2FscykKKyAgICAgICAgLCBtX2FyZ3VtZW50c0F0VGFpbChudW1B
cmd1bWVudHMpCisgICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVtTG9jYWxzKQogICAgIHsKICAg
ICB9CiAKQEAgLTEyNiw4ICsxMzcsMTIgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgIGJvb2wg
aXNPU1JUYXJnZXQ7CiAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAg
VmVjdG9yIDxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yIDxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzOworICAgIAorICAgIFZlY3RvcjxWYXJpYWJsZVJlY29y
ZCwgOD4gbV9hcmd1bWVudHNBdEhlYWQ7CisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCAxNj4g
bV9sb2NhbHNBdEhlYWQ7CisgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2Fy
Z3VtZW50c0F0VGFpbDsKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2Fsc0F0
VGFpbDsKIH07CiAKIC8vIApAQCAtMTM4LDExICsxNTMsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7
CiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZD
b3VudCAwLgogY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CiBwdWJsaWM6
Ci0gICAgR3JhcGgodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMp
Ci0gICAgICAgIDogbV9wcmVkaWN0aW9ucyhudW1Bcmd1bWVudHMsIG51bVZhcmlhYmxlcykKLSAg
ICB7Ci0gICAgfQotCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KICAg
ICB2b2lkIHJlZihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTE3MSwxNiArMTgxLDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZUJlZ2luKV07CiAgICAgfQogICAgIAotICAgIFByZWRpY3Rpb25UcmFj
a2VyJiBwcmVkaWN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uczsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5wcmVkaWN0
KG9wZXJhbmQsIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKICAgICBib29sIHByZWRpY3RHbG9i
YWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5wcmVkaWN0R2xvYmFsVmFyKHZhck51bWJl
ciwgcHJlZGljdGlvbik7CkBAIC0xOTAsMTEgKzE5MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAg
ICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbik7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6CiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigp
LCBwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEJ5SWQ6
CiAgICAgICAgIGNhc2UgR2V0TWV0aG9kOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgpAQCAtMjEy
LDExICsyMTMsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9ucy5nZXRQcmVkaWN0aW9uKG9wZXJhbmQpOwotICAgIH0KLSAgICAKICAgICBQcmVk
aWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih2
YXJOdW1iZXIpOwpAQCAtMjQ0LDcgKzI0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBzd2l0Y2ggKG5vZGVQdHItPm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihub2RlUHRyLT5sb2NhbCgpKTsKKyAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGk6
CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgICAgICByZXR1cm4g
Z2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlUHRyLT52YXJOdW1iZXIoKSk7CiAgICAgICAgIGNh
c2UgR2V0QnlJZDoKQEAgLTMyNCw2ICszMjMsOSBAQCBwdWJsaWM6CiAKICNpZm5kZWYgTkRFQlVH
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CisgICAgCisgICAgLy8g
VGhpcyBpcyBPKG4pLCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdmVyYm9zZSBkdW1wcy4K
KyAgICBjb25zdCBjaGFyKiBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVBY2Nlc3NE
YXRhKik7CiAjZW5kaWYKIAogICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKik7CkBAIC0zMzMsNyArMzM1LDEwIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKICAgICBWZWN0b3I8U3RvcmFnZUFj
Y2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxE
YXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOworICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJn
dW1lbnRzOworICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3Zh
cmlhYmxlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5z
aWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCShyZXZpc2lvbiA5NjE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDQwICszOTMsMjMgQEAgcHVibGljOgog
I2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVn
aW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOwotICAgICAgICB1bnNpZ25l
ZCBsYXN0TGl2ZUxvY2FsID0gMDsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAg
ICAgICAgICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5z
aXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9h
cmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0QXJndW1lbnQo
aSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRl
eF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fs
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0u
dmFsdWUgIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGxhc3RMaXZlTG9jYWwgPSBpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZC5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxv
Y2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0VmFyaWFi
bGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJ
bmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgewotICAgICAgICAgICAgZW50
cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCArIDEpOwotICAgICAg
ICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1lbnQ7ICsr
aSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVl
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5z
ZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnkt
Pm1fbGl2ZUFyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxhc3RM
aXZlTG9jYWwpIHsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXplKGxh
c3RMaXZlTG9jYWwgKyAxKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xl
YXJBbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9j
ay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5
LT5tX2xpdmVWYXJpYWJsZXMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXJBbGwoKTsKKyAgICAgICAg
YWN0aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5t
X3ByZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5V
U0VEX1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTYxOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8
d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZv
cm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3Jh
cGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtMTA4LDYgKzEwOSw1
MSBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKIH07CiAKK2NsYXNz
IFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+
IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgICAgICA6IG1fbG9jYWwo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1p
bigpKSkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQorICAg
ICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25l
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7CisgICAgICAgIHJl
dHVybiBtX2xvY2FsOworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOwor
ICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcg
d2UncmUgdW5pZmllZCB3aXRoCisgICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5k
IHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1dAorICAgIC8vIHB1dHRpbmcgdGhl
bSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNl
CisgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2Fu
dC4KKworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOworICAgIFByZWRpY3RlZFR5cGUgbV9w
cmVkaWN0aW9uOworfTsKKwogdHlwZWRlZiB1bnNpZ25lZCBBcml0aE5vZGVGbGFnczsKICNkZWZp
bmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4MDAKICNkZWZpbmUgTm9kZVVzZWRBc051bWJlciAgIDB4
MDEKQEAgLTIyMyw2ICsyNjksOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGFyaXRoTm9k
ZUZsYWdzCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFBoaSwgMCkgXAogICAgIFwKKyAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBzZXQu
ICovXAorICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZv
ciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJpdEFuZCwgTm9kZVJlc3VsdElu
dDMyKSBcCiAgICAgbWFjcm8oQml0T3IsIE5vZGVSZXN1bHRJbnQzMikgXApAQCAtNDYyLDE1ICs1
MTEsMzIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZh
bHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2spLmlzQm9vbGVhbigpOwogICAgIH0KICAgICAK
KyAgICBib29sIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNMb2NhbCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gb3AgPT0gR2V0TG9jYWwgfHwgb3AgPT0gU2V0TG9jYWw7CisgICAgICAgIHJl
dHVybiBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICB9Ci0KKyAgICAKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihtX29wSW5mbyktPmZpbmQoKTsK
KyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChoYXNMb2NhbCgpKTsKLSAgICAgICAgcmV0dXJuIChWaXJ0dWFsUmVnaXN0ZXIpbV9v
cEluZm87CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKICAg
ICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTYxOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjMgKzM1LDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1pbmxpbmUgYm9vbCBwcmVk
aWN0aW9uSXNWYWxpZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUsIFBy
ZWRpY3RlZFR5cGUgdHlwZSkKLXsKLSAgICAvLyB0aGlzIHRha2VzIGludG8gYWNjb3VudCBvbmx5
IGxvY2FsIHZhcmlhYmxlIHByZWRpY3Rpb25zIHRoYXQgZ2V0IGVuZm9yY2VkCi0gICAgLy8gb24g
U2V0TG9jYWwuCi0gICAgCi0gICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHR5cGUpKQotICAgICAg
ICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotICAgIAotICAgIGlmIChpc0FycmF5UHJlZGljdGlv
bih0eXBlKSkKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0g
ICAgCi0gICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odHlwZSkpCi0gICAgICAgIHJldHVybiB2
YWx1ZS5pc0Jvb2xlYW4oKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCogcHJl
cGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCkBAIC02Niw3
ICs0OSw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICNlbmRp
ZgogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5kZmdPU1JFbnRy
eURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVChl
bnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgpOwpAQCAtOTUsMjYgKzc3LDM0
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICBp
bnRvIGEgbGVzcy1saWtlbHkgcGF0aC4gU28sIHRoZSB3aXNlc3QgY291cnNlIG9mIGFjdGlvbiBp
cyB0byBzaW1wbHkgbm90CiAgICAgLy8gICAgT1NSIGF0IHRoaXMgdGltZS4KICAgICAKLSAgICBQ
cmVkaWN0aW9uVHJhY2tlciogcHJlZGljdGlvbnMgPSBiYXNlbGluZUNvZGVCbG9jay0+cHJlZGlj
dGlvbnMoKTsKLSAgICAKLSAgICBpZiAocHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCkg
PiBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVBcmd1bWVu
dHMuc2l6ZSgpICYmIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuZ2V0KGkpCi0gICAgICAgICAgICAm
JiAhcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBw
cmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVwcGVyQm91bmQoKTsg
KytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+
bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9B
Y3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
IChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsKKyNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIGFyZ3VtZW50ICV1IHdhcyBub3QgcGFzc2VkLCBleHBlY3RlZCAlcy5cbiIsIGksIGFjdGlv
bmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworI2VuZGlmCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZU9iZXlz
UHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb24p
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBp
LCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5n
KHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJs
ZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChpIDwgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5zaXplKCkgJiYgZW50cnktPm1fbGl2ZVZhcmlh
Ymxlcy5nZXQoaSkKLSAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRh
LCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0
aW9uKGkpKSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0
aW9ucy52YXJpYWJsZVVwcGVyQm91bmQoKTsgKytpKSB7CisgICAgICAgIEFjdGlvbmFibGVQcmVk
aWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKKyAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlv
bihnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24p
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBp
LCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlv
blRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVk
ICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCks
IGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5LDcgKzExOSw3IEBAIHZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBpZiAoIWdsb2JhbERh
dGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jv
d3RoIGZhaWxlZC4uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNl
IHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShyZXZpc2lv
biA5NjE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdPU1JFbnRyeV9oCiAjZGVm
aW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRl
ICJBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksOCAr
MzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHVuc2ln
bmVkIG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0Owot
ICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1bWVudHM7Ci0gICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlh
YmxlczsKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKIH07CiAKIGlu
bGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSog
b3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCShyZXZpc2lvbiA5NjE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSwxNCArMzE5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7
Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldFByZWRp
Y3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
biA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0p
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0KG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDcyLDcgKzQ3MiwxNCBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RVbmtub3duKTsKKyAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9kZS5j
aGlsZDEoKV07CisgICAgICAgICAgICBpZiAocHJlZGljdGlvbikgeworICAgICAgICAgICAgICAg
IGlmIChwcmVkaWN0aW9uICYgflByZWRpY3RPYmplY3RNYXNrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHByZWRpY3Rpb24gJj0gflByZWRpY3RPYmplY3RNYXNrOworICAgICAgICAgICAgICAgICAg
ICBwcmVkaWN0aW9uIHw9IFByZWRpY3RPYmplY3RVbmtub3duOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTU3MSwxNSArNTc4LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAg
ICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4
aXQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBUaGlzIGdl
dHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCi0gICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBQdXRCeVZh
bDoKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAg
ICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBh
bnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgYnJlYWs7CiAjZWxz
ZQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTYx
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSwyMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRJCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBWYWx1ZVNvdXJjZTo6ZHVt
cChGSUxFKiBvdXQpIGNvbnN0CiB7Ci0gICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9k
ZUluZGV4KTsKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0Ogor
ICAgICAgICBmcHJpbnRmKG91dCwgIk5vdFNldCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFZhbHVlSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ZnByaW50ZihvdXQsICJJbnQzMiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhhdmVOb2Rl
OgorICAgICAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgICAg
ICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQp
IGNvbnN0CkBAIC0yMDMsOSArMjE2LDkgQEAgT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBjaAogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1f
YXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFu
ZEZvckFyZ3VtZW50KGFyZ3VtZW50KSwgaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAg
ICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxl
ID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCi0gICAgICAg
IG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFy
aWFibGUsIGppdC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKKyAgICAgICAgbV92YXJpYWJsZXNb
dmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVz
W3ZhcmlhYmxlXSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03MjUsNyArNzM4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKTsKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9j
YWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgogICAgICAgICBpZiAocHJlZGljdGlv
biA9PSBQcmVkaWN0Tm9uZSkgewpAQCAtODAwLDcgKzgxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgIHx8ICghbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSICYmICFuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAg
ICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgCi0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9
IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKQEAgLTgyMyw5ICs4MzYsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
Ly8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhl
IHZhbHVlIG9mCiAgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3Rl
cnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgotICAgICAgICB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7
CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0g
VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gVGhp
cyBpcyBhIG5vLW9wOyBpdCBqdXN0IG1hcmtzIHRoZSBmYWN0IHRoYXQgdGhlIGFyZ3VtZW50IGlz
IGJlaW5nIHVzZWQuCisgICAgICAgIC8vIEJ1dCBpdCBtYXkgYmUgcHJvZml0YWJsZSB0byB1c2Ug
dGhpcyBhcyBhIGhvb2sgdG8gcnVuIHNwZWN1bGF0aW9uIGNoZWNrcworICAgICAgICAvLyBvbiBh
cmd1bWVudHMsIHRoZXJlYnkgYWxsb3dpbmcgdXMgdG8gdHJpdmlhbGx5IGVsaW1pbmF0ZSBzdWNo
IGNoZWNrcyBpZgorICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgbm90IHVzZWQuCisgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKQEAgLTIyMDQsMTAg
KzIyMjQsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAg
IG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1lbnRzW2ldID0g
VmFsdWVTb3VyY2UoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNp
emUoKTsgKytpKQotICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAg
QVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXpl
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFk
W2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2U6OmZvclBy
ZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgp
ID09IGJsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShW
YWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YXJpYWJs
ZXNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW25vZGVJbmRl
eF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAogICAg
IG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAg
IG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKIApAQCAtMjI3OCw5ICsyMzEyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNr
QXJndW1lbnRUeXBlcygKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBtX2J5
dGVjb2RlSW5kZXhGb3JPU1IgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Fy
Z3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNl
KFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9q
aXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxv
Y2soKS0+dGhpc1JlZ2lzdGVyKCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKClbbV9qaXQu
Z3JhcGgoKS5tX2FyZ3VtZW50c1tpXV0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQogICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIzMDMsMTIxICsyMzQzLDEyOSBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWVSZWNvdmVy
eSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQsIGNv
bnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVK
SVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJj
ZSkKIHsKLSAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpIHsKLSAgICAgICAgaWYgKG1fYnl0
ZWNvZGVJbmRleEZvck9TUiAmJiBpc0ludDMyUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFBy
ZWRpY3Rpb24ob3BlcmFuZCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgc3dpdGNoICh2YWx1ZVNv
dXJjZS5raW5kKCkpIHsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCi0gICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2
YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgICAgICAKKyAgICBjYXNlIEludDMySW5SZWdp
c3RlckZpbGU6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgICAgICAKKyAgICBjYXNlIEhhdmVOb2RlOiB7Cisg
ICAgICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlND
b25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgICAgICBOb2RlKiBu
b2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOworICAgICAg
ICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mg
bGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUs
IG9yIG9wZXJhbmQsCisgICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRv
IG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCisgICAgICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICAKLSAg
ICBOb2RlKiBub2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCld
OwotICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAvLyBJdCdz
IGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2Rl
LCBvciBvcGVyYW5kLAotICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1h
a2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgR2VuZXJhdGlv
bkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0
ZXIoKV07Ci0gICAgaWYgKCFpbmZvUHRyLT5hbGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgp
ICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSB7Ci0gICAgICAgIC8vIFRyeSB0byBzZWUgaWYg
dGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3
ZSB3YW50LgotICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgotICAgICAg
ICAvLwotICAgICAgICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24g
b2YgdGhlIHZhbHVlIGlzIGEgVmFsdWVUb051bWJlciBub2RlCi0gICAgICAgIC8vICAgIHRoZW4g
aXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUg
cGVyZm9ybWVkIGEKLSAgICAgICAgLy8gICAgVmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdh
eS4gVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051bWJlci4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxp
dmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0
aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCi0g
ICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGgg
VmFsdWVUb051bWJlciBiZWNhdXNlIGl0Ci0gICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSBy
ZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKLSAgICAg
ICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIEludDMyLgotICAgICAgICAv
LwotICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9m
IHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCi0gICAgICAgIC8vICAgIHRoZW4gdGhlIG9u
bHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51
bWJlcgotICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2Rl
IGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgLy8gICAgYWx0ZXJu
YXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcg
dXNlcyBvZgotICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJ
bnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAgIAotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKLSAg
ICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3Rlcigp
XTsKLSAgICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRl
eCgpID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZVRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWVUb0ludDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9O
dW1iZXJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25J
bmZvLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9qaXQuZ3JhcGgoKVtpbmZvLm5vZGVJbmRleCgpXTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVUb0RvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9J
bnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgICAgICAg
ICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGlvbkluZm8qIGlu
Zm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Cisg
ICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2
YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0
aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdl
IHdhbnQuCisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxp
dmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAg
ICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMgb2YgdGhlIHZh
bHVlIHdvdWxkIGhhdmUgcGVyZm9ybWVkIGEKKyAgICAgICAgICAgIC8vICAgIFZhbHVlVG9OdW1i
ZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1i
ZXIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lz
ZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAg
ICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYg
dGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAgICAgLy8gICAgYW5kIGEgVmFs
dWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2Ug
aXQKKyAgICAgICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3Vs
ZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKKyAgICAgICAgICAgIC8vICAgIG90aGVy
cyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2
YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCisgICAgICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5
IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1i
ZXIKKyAgICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6
IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisgICAgICAgICAg
ICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBv
bmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxk
IGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgIAorICAgICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlUHRy
LT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1f
aml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2Vu
ZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAg
IGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRl
eCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
dWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwg
bV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5m
by5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5u
b2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tl
ZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051
bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZv
Lm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAgICAgaWYgKHZhbHVlVG9O
dW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRl
eCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50
MzJJbmRleDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9O
b2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRl
eDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5v
Tm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7CisgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlckluZGV4OworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsK
LSAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2Vd
OwotICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZl
KCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2Ug
IT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5l
cmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5v
ZGVJbmRleFRvVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChq
c1VuZGVmaW5lZCgpKTsKLSAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgfQogICAgIAotICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKKyAgICAgICAgQVNT
RVJUKGluZm9QdHItPmFsaXZlKCkpOwogCi0gICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7Ci0gICAg
fQotICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQotICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAg
ICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewor
ICAgICAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERv
dWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0
ci0+ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9Q
dHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAg
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5KCk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICB9CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk2MTkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NiwyNiArNjYsNTMgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9OwogCitlbnVtIFZh
bHVlU291cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5SZWdpc3RlckZp
bGUsCisgICAgSW50MzJJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKwogY2xhc3Mg
VmFsdWVTb3VyY2UgewogcHVibGljOgogICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25v
ZGVJbmRleChOb05vZGUpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQo
U291cmNlTm90U2V0KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291
cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCisgICAgICAgIDogbV9ub2RlSW5k
ZXgobm9kZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKICAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgIT0gU291cmNlTm90U2V0KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBI
YXZlTm9kZSk7CiAgICAgfQogICAgIAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCiAgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAg
ICB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0
dXJuIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBO
b05vZGU7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCkgIT0g
U291cmNlTm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgp
OwogICAgIH0KICAgICAKICAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9k
ZSk7CiAgICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKICAgICB9CiAgICAgCkBAIC05NCw2ICsx
MjEsMjAgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAgIHN0YXRpYyBOb2Rl
SW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKKyAg
ICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1
ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0g
bm9kZUluZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhh
dmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7CisgICAgfQorICAgIAogICAgIE5vZGVJ
bmRleCBtX25vZGVJbmRleDsKIH07CiAgICAgCkBAIC01MTcsNyArNTU4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbb3AxXTsKICAgICAgICAgc3dpdGNo
IChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4g
aXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwo
KSkpOworICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0aW9uKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
ZXdBcnJheToKICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKQEAgLTU5MCw3ICs2MzEsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIC8vIFRyYWNraW5nIGZvciB3aGljaCBub2RlcyBhcmUgY3Vy
cmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgYW5kIGJ5dGVjb2RlCiAgICAg
Ly8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KLQorICAgIAogICAgIFZhbHVlU291cmNlIHZh
bHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiB2
YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7CkBAIC02MjMsMTEgKzY2NCwx
MSBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAgIHVpbnQzMl90IG1f
Ynl0ZWNvZGVJbmRleEZvck9TUjsKICAgICAKLSAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVNvdXJjZSYpOworICAgIFZhbHVl
UmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAog
ICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCiAg
ICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCwgdmFs
dWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogfTsK
IApAQCAtODUyLDcgKzg5Myw3IEBAIGlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVK
SVQoSkkKICAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQogICAgICwgbV9jb21waWxl
T2theSh0cnVlKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFt
ZXRlcnMpCi0gICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVtVmFycykKKyAg
ICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICwgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFja2VkSW50VmVjdG9yX2gKKyNkZWZpbmUgUGFj
a2VkSW50VmVjdG9yX2gKKworI2luY2x1ZGUgIkJpdFZlY3Rvci5oIgorCituYW1lc3BhY2UgV1RG
IHsKKworLy8gVGhpcyBjbGFzcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbiBhcnJheSBvZiBpbnRl
Z2Vycywgd2hlcmUgdGhvc2UKKy8vIGludGVnZXJzIGhhdmUgb25seSBhIGhhbmRmdWwgb2YgYml0
cyBlYWNoLiBJdCBpcyBub3QgbWVhbnQgdG8gYmUKKy8vIGVmZmljaWVudCBpbiB0aW1lLCBidXQg
b25seSBpbiBzcGFjZS4gKFRob3VnaCBtYWtpbmcgaXQgZWZmaWNpZW50CisvLyBpbiB0aW1lIGZv
ciBwb3dlci1vZi0yIHZhbHVlcyBvZiBiaXRDb3VudCB3b3VsZCBub3QgYmUgZGlmZmljdWx0LikK
Ky8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgZm9yIHNpZ25lZCB0
eXBlcywgaWYgeW91CisvLyBhcmUgcmVseWluZyBvbiB0aGUgc2lnbiBiZWluZyBwcmVzZXJ2ZWQu
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGJpdENvdW50PgorY2xhc3MgUGFja2Vk
SW50VmVjdG9yIHsKK3B1YmxpYzoKKyAgICBQYWNrZWRJbnRWZWN0b3IoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJpdENvdW50KTsKKyAgICAgICAgQVNTRVJUKGJpdENvdW50IDwgc2l6ZW9mKHZv
aWQqKSAqIDgpOworICAgIH0KKyAgICAKKyAgICBQYWNrZWRJbnRWZWN0b3IoY29uc3QgUGFja2Vk
SW50VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHMob3RoZXIubV9iaXRzKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgUGFja2Vk
SW50VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYml0cyA9IG90aGVyLm1fYml0czsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iaXRzLnNpemUoKSAvIGJpdENvdW50OworICAg
IH0KKyAgICAKKyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUludHMpCisgICAgeworICAg
ICAgICBtX2JpdHMuZW5zdXJlU2l6ZShudW1JbnRzICogYml0Q291bnQpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtSW50cykKKyAgICB7CisgICAgICAgIG1fYml0cy5y
ZXNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckFs
bCgpCisgICAgeworICAgICAgICBtX2JpdHMuY2xlYXJBbGwoKTsKKyAgICB9CisgICAgCisgICAg
VCBnZXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdWludHB0cl90IHJlc3Vs
dCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IGJp
dENvdW50OyArK3N1YkluZGV4KSB7CisgICAgICAgICAgICByZXN1bHQgPDw9IDE7CisgICAgICAg
ICAgICByZXN1bHQgfD0gKG1fYml0cy5nZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4KSA/
IDEgOiAwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4ocmVzdWx0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBUIHZhbHVlKQorICAg
IHsKKyAgICAgICAgLy8gRG8gYXJpdGhtZXRpYyB1c2luZyB1aW50cHRyX3QsIGJlY2F1c2UgKDEp
IHdlIGtub3cgd2hhdCBpdCBpcworICAgICAgICAvLyAoVCBtaWdodCBiZSBhbiBlbnVtKSBhbmQg
KDIpIGl0J3MgdGhlIGxhcmdlc3QgaW50ZWdlciB0eXBlIHRoYXQKKyAgICAgICAgLy8gaXMgbGlr
ZWx5IHRvIHBlcmZvcm0gZGVjZW50bHkgd2VsbC4KKyAgICAgICAgdWludHB0cl90IG15VmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBy
ZWxpbWluYXJ5IHNhbml0eSBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBub3Qgb3V0IG9mIHJhbmdl
LgorICAgICAgICBBU1NFUlQoKG15VmFsdWUgJiBtYXNrKCkpID09IG15VmFsdWUpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IGJpdENvdW50OyBzdWJJbmRleC0t
ID4gMDspIHsKKyAgICAgICAgICAgIG1fYml0cy5zZXQoaW5kZXggKiBiaXRDb3VudCArIHN1Yklu
ZGV4LCAhIShteVZhbHVlICYgMSkpOworICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIHRoYXQgd2Ugc3Rv
cmVkIHdoYXQgdGhlIHVzZXIgdGhvdWdodCB3ZQorICAgICAgICAvLyBzdG9yZWQuCisgICAgICAg
IEFTU0VSVChnZXQoaW5kZXgpID09IHZhbHVlKTsKKyAgICB9Citwcml2YXRlOgorICAgIC8vIFRo
aXMgcmV0dXJucyB0aGUgbWFzaywgYW5kIGlzIGNhcmVmdWwgdG8gbm90IHN0ZXAgb24gdGhlIHdy
YXAtYXJvdW5kCisgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBzaGlmdCBhbW91bnQgKDEgPDwgMzIg
aXMgMSBzaW5jZSAzMiB3cmFwcyB0byAwKS4gVGhlcmUKKyAgICAvLyBpcyB0aGUgc2VwYXJhdGUg
cXVlc3Rpb24gb2Ygd2h5IHlvdSB3b3VsZCBldmVyIHVzZSB0aGlzIHRvIHN0b3JlIDMyLWJpdAor
ICAgIC8vIG9yIDY0LWJpdCB2YWx1ZXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBoYXZl
IHRoaXMgd29yayBhcyBleHBlY3RlZAorICAgIC8vIGluIHN1Y2ggc2l0dWF0aW9ucyByZWdhcmRs
ZXNzLgorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFzaygpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDIpIDw8IChiaXRDb3VudCAtIDEpKSAtIDE7IH0KKyAgICAgICAgICAgICAgIAor
ICAgIC8vIFN0b3JlcyBpbnRlZ2VycyBiaXQgYnkgYml0IGluIGJpZyBlbmRpYW4uCisgICAgQml0
VmVjdG9yIG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBh
Y2tlZEludFZlY3RvcjsKKworI2VuZGlmIC8vIFBhY2tlZEludFZlY3Rvcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9VbmlvbkZpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVW5pb25GaW5kX2gKKyNkZWZpbmUgVW5pb25GaW5kX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIFVuaW9uRmluZCBjbGFzcyBjYW4g
YmUgdXNlZCB0byBjb21wdXRlIGRpc2pvaW50IHNldHMgdXNpbmcgdGhlCisvLyBkaXNqb2ludC1z
ZXQgZm9yZXN0IGRhdGEgc3RydWN0dXJlLiBFYWNoIFVuaW9uRmluZCBpbnN0YW5jZSBpcyBhCisv
LyBub2RlIGluIHRoZSBmb3Jlc3QuIFR5cGljYWxseSB5b3UgdXNlIGl0IGJ5IHVzaW5nIFVuaW9u
RmluZCBhcyBhCisvLyBzdXBlcmNsYXNzOgorLy8KKy8vIGNsYXNzIE1lbWJlck9mU2V0OiBwdWJs
aWMgVW5pb25GaW5kPE1lbWJlck9mU2V0PiB7IC4uLiB9CisvLworLy8gQ2FsbGluZyB4LT5maW5k
KCkgZ2l2ZXMgeW91IGEgTWVtYmVyT2ZTZXQqIHRoYXQgcmVwcmVzZW50cyB0aGUKKy8vIGRpc2pv
aW50IHNldCB0aGF0IHggYmVsb25ncyB0by4gQ2FsbGluZyB4LT51bmlmeSh5KSB1bmlmaWVzIHgn
cworLy8gc2V0IHdpdGggeSdzIHNldCwgYW5kIGVuc3VyZXMgdGhhdDoKKy8vCisvLyB4LT5maW5k
KCkgPT0geS0+ZmluZCgpCisvLworLy8gYW5kIHRoYXQ6CisvLworLy8gYS0+ZmluZCgpID09IGIt
PmZpbmQoKQorLy8KKy8vIGZvciBhbnkgYSwgYiBpZiBwcmlvciB0byB0aGUgY2FsbCB0byB4LT51
bmlmeSh5KSwgd2Ugd291bGQgaGF2ZQorLy8gaGFkOgorLy8KKy8vIGEtPmZpbmQoKSA9PSB4Cisv
LyBiLT5maW5kKCkgPT0geQorLy8KKy8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYWxtb3N0IGFt
b3J0aXplZCBPKDEpLCBidXQgY291bGQgYmUgd29yc2UKKy8vIGluIHVubGlrZWx5IHBhdGhvbG9n
aWNhbCBjYXNlcy4gSXQgZmF2b3JzIGhhdmluZyBhIG5vbi1yZWN1cnNpdmUKKy8vIHNpbmdsZSBw
YXNzIGltcGxlbWVudGF0aW9uIG9mIHVuaWZ5KCkgYW5kIGZpbmQoKSBvdmVyIGVuc3VyaW5nIHRo
ZQorLy8gdGhlb3JldGljYWwgTyhJbnZlcnNlQWNrZXJtYW5uW25dKSBhbW9ydGl6ZWQgYm91bmQs
IHdoaWNoIGlzIG11Y2gKKy8vIGNsb3NlciB0byBhbW9ydGl6ZWQgTygxKS4KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIFVuaW9uRmluZCB7CitwdWJsaWM6CisgICAgVW5pb25GaW5kKCkK
KyAgICAgICAgOiBtX3BhcmVudCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVCogZmluZCgp
CisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAg
ICAgIFQqIG5leHQgPSByZXN1bHQtPm1fcGFyZW50OworICAgICAgICB3aGlsZSAobmV4dCkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gbmV4dDsKKyAgICAgICAgICAgIG5leHQgPSByZXN1bHQtPm1f
cGFyZW50OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IHRoaXMpCisgICAgICAgICAgICBtX3BhcmVudCA9IHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmlmeShUKiBvdGhlcikKKyAg
ICB7CisgICAgICAgIFQqIGEgPSBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmZpbmQoKTsKKyAgICAg
ICAgVCogYiA9IG90aGVyLT5maW5kKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWEtPm1f
cGFyZW50KTsKKyAgICAgICAgQVNTRVJUKCFiLT5tX3BhcmVudCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYS0+
bV9wYXJlbnQgPSBiOworICAgIH0KK3ByaXZhdGU6CisgICAgVCogbV9wYXJlbnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpVbmlvbkZpbmQ7CisKKyNlbmRpZiAvLyBV
bmlvbkZpbmRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109121</attachid>
            <date>2011-09-28 22:14:07 -0700</date>
            <delta_ts>2011-09-29 12:06:35 -0700</delta_ts>
            <desc>the patch - add 32_64</desc>
            <filename>liverangesplit_patch_14.diff</filename>
            <type>text/plain</type>
            <size>102660</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYyOTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE5IEBA
CisyMDExLTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBzaG91bGQgaW5mZXIgd2hpY2ggdXNlcyBvZiBhIHZhcmlhYmxlIGFyZSBub3QgYWxp
YXNlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgc2VwYXJhdGVzIGhvdyBhIHZhcmlhYmxlIGlzIHN0b3JlZCAoaS5lLiBpdHMgdmly
dHVhbCByZWdpc3RlcikKKyAgICAgICAgZnJvbSBob3cgaXQncyBwcmVkaWN0ZWQuIEVhY2ggdmFy
aWFibGUgbm93IHRha2VzIGEKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhIGFzIGl0cyBvcGVy
YW5kLCBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgICAgICBUaGUgVmFyaWFi
bGVBY2Nlc3NEYXRhIHN0b3JlcyB0aGUgb3BlcmFuZCBhbmQgdGhlIHByZWRpY3Rpb24uIElmCisg
ICAgICAgIG11bHRpcGxlIHVzZXMgb2YgYSB2YXJpYWJsZSBhcmUgYWxpYXNlZCwgdGhlaXIgVmFy
aWFibGVBY2Nlc3NEYXRhcworICAgICAgICBhcmUgdW5pZmllZC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWxzbyBhZGRzIHRyYWNraW5nIG9mIHdoaWNoIGFyZ3VtZW50IHZhbHVlcyBhcmUgdXNl
ZC4gSXQKKyAgICAgICAgY29ycmVjdGx5IG9ic2VydmVzIHRoYXQgYW4gYXJndW1lbnQgdmFsdWUg
aXMgbm90IHVzZWQsIGlmIHRoZQorICAgICAgICBhcmd1bWVudCBpcyBhc3NpZ25lZCB0byBpbnNp
ZGUgdGhlIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIGFkZHMgdHJhY2tpbmcgb2Ygd2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlIGF0IHRoZSBo
ZWFkIG9mCisgICAgICAgIGEgYmFzaWMgYmxvY2ssIGFuZCBzZXBhcmF0ZXMgdGhhdCBmcm9tIGEg
dmFyaWFibGUgYmVpbmcgbGl2ZSBhdCB0aGUKKyAgICAgICAgdGFpbC4KKyAgICAgICAgCisgICAg
ICAgIEZpbmFsbHksIHRoaXMgY29tbXVuaWNhdGVzIHRvIGJvdGggT1NSIGVudHJ5IGFuZCBPU1Ig
ZXhpdCBjb2RlIGhvdworICAgICAgICBhIHZhcmlhYmxlIGlzIHByZWRpY3RlZCBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQgaW4gdGhlIGNvZGUsIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgY29tbXVu
aWNhdGluZyBob3cgaXQgd2FzIHByZWRpY3RlZCBpbiB0aGUgZW50aXJlIGNvZGUKKyAgICAgICAg
YmxvY2sgKHNpbmNlIHdpdGggdGhpcyBwYXRjaCB0aGVyZSBpcyBubyBsb25nZXIgdGhlIG5vdGlv
biBvZiBhCisgICAgICAgIHZhcmlhYmxlIGhhdmluZyBqdXN0IG9uZSBwcmVkaWN0aW9uIGZvciBh
IGNvZGUgYmxvY2spLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZSk6CisgICAgICAgIChKU0M6OnZhbHVlT2JleXNQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6QWN0aW9uYWJsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
QWN0aW9uYWJsZVByZWRpY3Rpb25zOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFjdGlv
bmFibGVQcmVkaWN0aW9uczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJl
ZGljdGlvbnM6OnNldFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rp
b25zOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkFjdGlvbmFibGVQcmVkaWN0aW9uczo6YXJn
dW1lbnRVcHBlckJvdW5kKToKKyAgICAgICAgKEpTQzo6QWN0aW9uYWJsZVByZWRpY3Rpb25zOjp2
YXJpYWJsZVVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6
OnBhY2spOgorICAgICAgICAoSlNDOjpBY3Rpb25hYmxlUHJlZGljdGlvbnM6OnBhY2tWZWN0b3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1By
ZWRpY3Rpb25UcmFja2VyLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJv
Y2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElz
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlUmVjb3JkOjpzZXRGaXJzdFRp
bWUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25BcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKToKKyAgICAgICAgKiB3dGYvUGFja2VkSW50VmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpQYWNrZWRJbnRWZWN0b3I6OlBhY2tlZEludFZlY3Rvcik6CisgICAgICAgIChXVEY6OlBh
Y2tlZEludFZlY3Rvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9y
OjpzaXplKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjplbnN1cmVTaXplKToKKyAg
ICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpQYWNr
ZWRJbnRWZWN0b3I6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpn
ZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6
OlBhY2tlZEludFZlY3Rvcjo6bWFzayk6CisgICAgICAgICogd3RmL1VuaW9uRmluZC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6VW5pb25GaW5kOjpVbmlvbkZpbmQpOgorICAgICAgICAoV1RGOjpV
bmlvbkZpbmQ6OmZpbmQpOgorICAgICAgICAoV1RGOjpVbmlvbkZpbmQ6OnVuaWZ5KToKKwogMjAx
MS0wOS0yOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4IHB0IDIgZm9yIHI5NjI4Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiA5
NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMw
LDYgKzE0MzAsMTAgQEAKIAkJCU5hbWU9ImJ5dGVjb2RlIgogCQkJPgogCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEFjdGlvbmFibGVQcmVkaWN0aW9uLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2Rl
XENvZGVCbG9jay5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCShyZXZpc2lvbiA5NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTk0MSw2ICs5NDEs
MTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3
dGZcUGFja2VkSW50VmVjdG9yLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5cd3RmXFBhZ2VBbGxvY2F0aW9uLmgiCiAJCQk+CiAJCTwvRmlsZT4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NjI5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwxMCBAQAogCQkwQkRGRkFFMDBGQzYxOTI5MDBE
NjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQx
MEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0
IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9
OworCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZENzI0MTQyQzM5QTIwMENG
Nzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMg
LyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjA0RThBMTQyRDY5Njkw
MDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovOyB9OworCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2
NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggKi87IH07CisJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGlj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07CiAJ
CTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAw
NzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIw
MDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2
M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1m
bm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTY1LDYgKzY3LDcgQEAKIAkJMEZEM0M4MjYx
NDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJp
dmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDND
ODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CiAJCTBGRDNDODI4
MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2
ZXIuaCAqLzsgfTsKKwkJMEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENTJBQUMxNDMw
MzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07
CiAJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0
MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc5Nyw4ICs4MDAsMTAg
QEAKIAkJMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duRmFzdE1hbGxvY1B0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3Nz
VGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEy
ODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNjA0RThBMTQy
RDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVk
aWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGlvbmFibGVQcmVk
aWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNr
VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxNCw2ICs4MTksNyBAQAogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMzE0MTE1RDFBMDBGRDgxQ0IgLyogREZHUHJvcGFn
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcm9wYWdh
dG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGFnYXRvci5oOyBwYXRoID0g
ZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZENTJB
QUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmlvbkZpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
ODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgy
RTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJp
bGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIw
MDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTgyMiw3ICsxODI4LDkgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY2MDRFOEEx
NDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi8sCisJCQkJMEZENTJBQUMxNDMwMzU5
RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovLAorCQkJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2
QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLywKKwkJCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEg
LyogQml0VmVjdG9yLmNwcCAqLywKIAkJCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0
VmVjdG9yLmggKi8sCiAJCQkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJ
CQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKQEAgLTIzNTMsNiArMjM2MSw3
IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY2MzZEQTExNDJEMjdFRDAwQjJF
NjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8sCiAJCQkJMEZEODJFOEUxNDIwN0E1MTAw
MTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZEODJFODQxNDFGM0ZEQTAwMTc5
Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovLAogCQkJCTBGRDgyRTRGMTQxREFFQTEwMDE3OUM5
NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi8sCkBAIC0yODM2LDcgKzI4NDUsMTAgQEAKIAkJCQkxQTA4
Mjc3QTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0NTZCMDE0MjdGQjkxMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2Vk
SW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEg
LyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEzMTQy
OTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ1MkFBRTE0
MzAzNUEwMDAyNkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg4MEYx
RTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTMxNTEsNiArMzE2Myw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRjE2
RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVk
aWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM2Miw3ICszMzc1LDYgQEAKIAkJCQkx
QTA4Mjc3OTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIg
LyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFDMTQzMjhCQjkwMEIw
OEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODY4ODBGMUQxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVyMzJfNjQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKKyNk
ZWZpbmUgQWN0aW9uYWJsZVByZWRpY3Rpb25faAorCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2lu
Y2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8
d3RmL1BhY2tlZEludFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQW4gYWN0aW9u
YWJsZSBwcmVkaWN0aW9uIGlzIG9uZSB0aGF0IGlzIGVuZm9yY2VkIG9uIHN0b3JlcyB0byBsb2Nh
bCB2YXJpYWJsZXMKKy8vIGFuZCBhcmd1bWVudHMsIGFuZCB3aGVuIHBhc3NpbmcgYXJndW1lbnRz
IHRvIGZ1bmN0aW9ucy4gVGhlc2UgbXVzdCBiZSByZWNvcmRlZAorLy8gaW4gQ29kZUJsb2NrLgor
CitlbnVtIEFjdGlvbmFibGVQcmVkaWN0aW9uIHsKKyAgICBOb0FjdGlvbmFibGVQcmVkaWN0aW9u
LAorICAgIEVuZm9yY2VJbnQzMlByZWRpY3Rpb24sCisgICAgRW5mb3JjZUFycmF5UHJlZGljdGlv
biwKKyAgICBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb24KK307CisKK2lubGluZSBBY3Rpb25hYmxl
UHJlZGljdGlvbiBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbikKK3sKKyAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlv
bikpCisgICAgICAgIHJldHVybiBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOworICAgIAorICAgIGlm
IChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEVuZm9yY2VB
cnJheVByZWRpY3Rpb247CisgICAgCisgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIHJldHVybiBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb247CisgICAgCisg
ICAgcmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Cit9CisKK2lubGluZSBib29sIHZhbHVl
T2JleXNQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwg
QWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRpY3Rp
b24pIHsKKyAgICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2
YWx1ZS5pc0ludDMyKCk7CisKKyAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246CisgICAg
ICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUpOworCisgICAgY2FzZSBFbmZv
cmNlQm9vbGVhblByZWRpY3Rpb246CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0gTm9B
Y3Rpb25hYmxlUHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwor
aW5saW5lIGNvbnN0IGNoYXIqIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcoQWN0aW9uYWJs
ZVByZWRpY3Rpb24gcHJlZGljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByZWRpY3Rpb24pIHsKKyAg
ICBjYXNlIEVuZm9yY2VJbnQzMlByZWRpY3Rpb246CisgICAgICAgIHJldHVybiAiRW5mb3JjZUlu
dDMyIjsKKyAgICAgICAgCisgICAgY2FzZSBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOgorICAgICAg
ICByZXR1cm4gIkVuZm9yY2VBcnJheSI7CisgICAgICAgIAorICAgIGNhc2UgRW5mb3JjZUJvb2xl
YW5QcmVkaWN0aW9uOgorICAgICAgICByZXR1cm4gIkVuZm9yY2VCb29sZWFuIjsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxl
UHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiAiTm9BY3Rpb25hYmxlUHJlZGljdGlvbiI7Cisg
ICAgfQorfQorCit0eXBlZGVmIFBhY2tlZEludFZlY3RvcjxBY3Rpb25hYmxlUHJlZGljdGlvbiwg
Mj4gQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3I7CisKK2NsYXNzIEFjdGlvbmFibGVQcmVkaWN0
aW9ucyB7CitwdWJsaWM6CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKCkgeyB9CisKKyAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnModW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1W
YXJpYWJsZXMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5lbnN1cmVTaXplKG51bUFyZ3Vt
ZW50cyk7CisgICAgICAgIG1fdmFyaWFibGVzLmVuc3VyZVNpemUobnVtVmFyaWFibGVzKTsKKyAg
ICAgICAgbV9hcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgbV92YXJpYWJsZXMuY2xlYXJB
bGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVu
dCwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50
cy5zZXQoYXJndW1lbnQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRp
Y3Rpb24gYXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoYXJn
dW1lbnQgPj0gbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vQWN0aW9u
YWJsZVByZWRpY3Rpb247CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5nZXQoYXJndW1lbnQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlLCBB
Y3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFibGVzLnNl
dCh2YXJpYWJsZSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBY3Rpb25hYmxlUHJlZGljdGlv
biB2YXJpYWJsZSh1bnNpZ25lZCB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIGlmICh2YXJpYWJs
ZSA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gTm9BY3Rpb25hYmxl
UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdldCh2YXJpYWJsZSk7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50VXBwZXJCb3VuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHZhcmlhYmxlVXBwZXJCb3Vu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIAorICAgIHZvaWQg
cGFjaygpCisgICAgeworICAgICAgICBwYWNrVmVjdG9yKG1fYXJndW1lbnRzKTsKKyAgICAgICAg
cGFja1ZlY3RvcihtX3ZhcmlhYmxlcyk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0
aWMgdm9pZCBwYWNrVmVjdG9yKEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yJiB2ZWN0b3IpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBsYXN0U2V0SW5kZXggPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
dmVjdG9yLmdldChpKSAhPSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgICAg
IGxhc3RTZXRJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9yLnJlc2l6ZShsYXN0
U2V0SW5kZXggKyAxKTsKKyAgICB9CisgICAgCisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0
b3IgbV9hcmd1bWVudHM7CisgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3IgbV92YXJpYWJs
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFjdGlvbmFibGVQcmVk
aWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDk2Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsOSArMjQwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0
aXZlLmdldCgpOyB9CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJu
YXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQogICAgICAgICAKLSAg
ICAgICAgdm9pZCBzZXRQcmVkaWN0aW9ucyhQYXNzT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBw
cmVkaWN0aW9ucykgeyBtX3ByZWRpY3Rpb25zID0gcHJlZGljdGlvbnM7IH0KLSAgICAgICAgUHJl
ZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkaWN0aW9u
cy5nZXQoKTsgfQotCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
ICAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKQEAgLTk3
NSw4ICs5NzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBPd25QdHI8Q29kZUJsb2Nr
PiBtX2FsdGVybmF0aXZlOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFj
a2VyPiBtX3ByZWRpY3Rpb25zOwotCiAgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsK
ICAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOwogICAgICAgICB1
aW50MzJfdCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaAkocmV2aXNpb24gOTYy
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAKIAogI2luY2x1ZGUgIlByZWRpY3Rl
ZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLS8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlz
aCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUgYm9vbCBvcGVyYW5k
SXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KLQogc3RydWN0
IFByZWRpY3Rpb25TbG90IHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9uU2xvdCgpCkBAIC01MCw0
NiArNDYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBQcmVkaWN0aW9uVHJh
Y2tlcih1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKLSAgICAg
ICAgOiBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV92YXJpYWJsZXMobnVt
VmFyaWFibGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0aWFsaXplU2ltaWxh
clRvKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1fYXJn
dW1lbnRzLnJlc2l6ZShvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgbV92YXJp
YWJsZXMucmVzaXplKG90aGVyLm51bWJlck9mVmFyaWFibGVzKCkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvcHlMb2NhbHNGcm9tKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKLSAg
ICB7Ci0gICAgICAgIG1fYXJndW1lbnRzID0gb3RoZXIubV9hcmd1bWVudHM7Ci0gICAgICAgIG1f
dmFyaWFibGVzID0gb3RoZXIubV92YXJpYWJsZXM7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBu
dW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQot
ICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVz
LnNpemUoKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKGlu
dCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBib29sIHByZWRpY3RB
cmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVudF0u
bV92YWx1ZSwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChpbnQg
b3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RBcmd1
bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSwgcHJlZGljdGlvbik7Ci0gICAg
ICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChvcGVyYW5kID49IDApOwotICAgICAgICAgICAgbV92YXJpYWJsZXMucmVz
aXplKG9wZXJhbmQgKyAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1l
cmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBwcmVkaWN0aW9uKTsK
LSAgICB9Ci0gICAgCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJl
ciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQo
dmFyTnVtYmVyICsgMSk7CkBAIC0xMDIsMjAgKzU4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBwcmVkaWN0aW9uKTsKICAg
ICB9CiAgICAgCi0gICAgUHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWdu
ZWQgYXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRd
Lm1fdmFsdWU7Ci0gICAgfQotCi0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBv
cGVyYW5kKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9y
T3BlcmFuZChvcGVyYW5kKSk7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFy
aWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5t
X3ZhbHVlOwotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgfQotICAgIAogICAgIFBy
ZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAg
ICAgewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKQEAgLTEyNSw4ICs2Nyw2
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFZlY3RvcjxQcmVkaWN0aW9u
U2xvdCwgMTY+IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1f
dmFyaWFibGVzOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90PiBtX2dsb2Jh
bFZhcnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMs
MTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NQaGlTdGFjaygpOwogICAgIC8vIEFkZCBz
cGlsbCBsb2NhdGlvbnMgdG8gbm9kZXMuCiAgICAgdm9pZCBhbGxvY2F0ZVZpcnR1YWxSZWdpc3Rl
cnMoKTsKLQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSkpOworICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJs
ZUFjY2Vzc0RhdGEubGFzdCgpOworICAgIH0KKyAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVy
YW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBOb2RlSW5kZXggZ2V0
KGludCBvcGVyYW5kKQogICAgIHsKQEAgLTExNiw3ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIC8v
IFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBp
cyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVy
YW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5tX2xvY2Fsc1tvcGVyYW5kXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZTsKIAogICAgICAg
ICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKQEAgLTEyOSwxNiArMTM3LDIxIEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKICAg
ICAgICAgLy8gZXhwYW5kIG1fcHJlc2VydmVkVmFycyB0byBjb3ZlciB0aGVzZS4KICAgICAgICAg
bV9wcmVzZXJ2ZWRWYXJzID0gc3RkOjptYXgobV9wcmVzZXJ2ZWRWYXJzLCBvcGVyYW5kICsgMSk7
Ci0KLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgCisg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9
IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1f
bG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBv
cGVyYW5kKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byhvcGVyYW5kKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzW29wZXJh
bmRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gbm9kZUluZGV4OworICAg
ICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRIZWFkW29wZXJhbmRdLnNl
dEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXgg
dmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNbb3BlcmFuZF0u
dmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gYWRk
VG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSks
IHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBh
Ym92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0xNDcsMjAgKzE2MCwz
NSBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1
bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlOwogCiAgICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNp
YyBibG9jazsgbGluaworICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0
QXJndW1lbnQuCisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBub2RlSW5k
ZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1l
bnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OworICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2Nh
bCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFk
ZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwotICAg
ICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8ob3BlcmFuZCksIHBo
aSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c1thcmd1bWVudF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICAK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRG
aXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
CiAgICAgfQogICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1
ZSkKQEAgLTE2OCw3ICsxOTYsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50cyk7CiAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzW2FyZ3VtZW50
XS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVl
ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZv
cm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCkBAIC02ODgsNiArNzE2LDE5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KKyAgICAKKyAgICAv
LyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3Ig
YXJndW1lbnRzLiBUaGlzIGFsbG93cworICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFu
IGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCisgICAgLy8g
b3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgorICAgIGlmICghbV9j
dXJyZW50SW5kZXgpIHsKKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1B
cmd1bWVudHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZUluZGV4IHNl
dEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShhcmd1bWVudCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYXJn
dW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50
XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOworICAgICAgICB9CisgICAgfQogCiAgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKICAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKQEAgLTE0NDgsMjAgKzE0ODksMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgCiAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJl
ZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CiAgICAgICAgIHVuc2ln
bmVkIHZhck5vID0gZW50cnkubV92YXJObzsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAgIFZhcmlhYmxlUmVj
b3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JC
bG9jay0+bV9hcmd1bWVudHNbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNbdmFy
Tm9dOworICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJn
dW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2YXJO
b10gOiBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107CiAKICAgICAgICAg
ICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7CiAgICAgICAgICAg
ICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgewotICAgICAgICAgICAgICAgIHZh
bHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpKTsKLSAgICAgICAgICAgICAgICB2YXIu
dmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgdmFsdWVJblByZWRl
Y2Vzc29yID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoc3Rh
Y2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyB2YXJObyAtIG1fY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgOiB2YXJObykpKTsK
KyAgICAgICAgICAgICAgICB2YXIuc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQorICAgICAg
ICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJOb10u
c2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0SGVhZFt2YXJO
b10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgcGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRl
Y2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5Q
cmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJlIGlk
ZW50aWNhbCBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFuZCBpdHMg
YmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhlIHR3bwor
ICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5jeSwgd2Ug
d2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCisgICAgICAgICAgICAgICAgLy8g
YW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVjaCBhcyBw
b3NzaWJsZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLmNoaWxkMSgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJl
ZGVjZXNzb3JdLmNoaWxkMSgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
b3AgPT0gUGhpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLm9wID09IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNl
dEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0g
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkYXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkp
OwogCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9waGldOwog
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCkBAIC0xNDc5LDggKzE1MzYsOCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAg
IHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTm9k
ZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTm9kZUluZGV4IG5ld1BoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8oZGF0YUZvclBoaSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9w
aGldOyAvLyByZWxvYWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQogICAgICAgICAgICAgTm9kZSYgbmV3
UGhpTm9kZSA9IG1fZ3JhcGhbbmV3UGhpXTsKQEAgLTE1NDgsNiArMTYwNSw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFj
az4oKTsKICAgICAKICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyA9IG1fcHJlc2VydmVkVmFy
czsKKyAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5t
X3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gOTYy
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlv
biwgQ29tcAogaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhl
Y1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNv
ZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBHcmFwaCBkZmc7CiAgICAgaWYgKCFwYXJzZShkZmcs
IGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAg
LTQ3LDE1ICs0Nyw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICAKICAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spOwogICAgIAot
ICAgIC8vIFNhdmUgdGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVudHJ5
IGNhbiB2ZXJpZnkgdGhlbS4gUHJlZGljdGlvbnMKLSAgICAvLyBhcmUgc2F2ZWQgaW4gdGhlIENv
ZGVCbG9jayBmcm9tIHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0aGUK
LSAgICAvLyBDb2RlQmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFjZWQg
YXQgYW55IHRpbWUuCi0gICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucyA9
IGFkb3B0UHRyKG5ldyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKLSAgICAqcHJlZGljdGlvbnMgPSBk
ZmcucHJlZGljdGlvbnMoKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwotICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0UHJl
ZGljdGlvbnMocHJlZGljdGlvbnMucmVsZWFzZSgpKTsKLSAgICAKICAgICBKSVRDb21waWxlciBk
YXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CiAgICAgaWYgKGNvbXBpbGVN
b2RlID09IENvbXBpbGVGdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0
eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiA5NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzOSBAQCBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1l
KE5vZGVUeXBlIG9wKQogICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107CiB9
CiAKK2NvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEpCit7CisgICAgLy8gVmFyaWFibGVzIGFyZSBh
bHJlYWR5IG51bWJlcmVkLiBGb3IgcmVhZGFiaWxpdHkgb2YgSVIgZHVtcHMsIHRoaXMgcmV0dXJu
cworICAgIC8vIGFuIGFscGhhYmV0aWMgbmFtZSBmb3IgdGhlIHZhcmlhYmxlIGFjY2VzcyBkYXRh
LCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvCisgICAgLy8gcmVhc29uIGFib3V0IHR3byBudW1i
ZXJzICh2YXJpYWJsZSBudW1iZXIgYW5kIGxpdmUgcmFuZ2UgbnVtYmVyKSwgYnV0IGluc3RlYWQK
KyAgICAvLyBhIG51bWJlciBhbmQgYSBsZXR0ZXIuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXgg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICgmbV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0gPT0gdmFyaWFibGVBY2Nlc3NEYXRhKSB7Cisg
ICAgICAgICAgICBpbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBBU1NFUlQoaW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKTsKKyAgICAKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4gIkEiOwor
CisgICAgc3RhdGljIGNoYXIgYnVmWzEwXTsKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxjaGFy
PiBwdHIoYnVmLCBzaXplb2YoYnVmKSk7CisgICAgCisgICAgd2hpbGUgKGluZGV4KSB7CisgICAg
ICAgICpwdHIrKyA9ICdBJyArIChpbmRleCAlIDI2KTsKKyAgICAgICAgaW5kZXggLz0gMjY7Cisg
ICAgfQorICAgIAorICAgICpwdHIrKyA9IDA7CisgICAgCisgICAgcmV0dXJuIGJ1ZjsKK30KKwog
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKQEAgLTExNiwxMiArMTQ5LDE0
IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgICAg
IHByaW50ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5pZGVudGlmaWVy
TnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKG5v
ZGUuaGFzTG9jYWwoKSkgewotICAgICAgICBpbnQgbG9jYWwgPSBub2RlLmxvY2FsKCk7Ci0gICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChsb2NhbCkpCi0gICAgICAgICAgICBwcmludGYoIiVz
YXJnJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBsb2NhbCAtIGNvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCkpOworICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5v
ZGUuaGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpIHsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNz
RGF0YS0+b3BlcmFuZCgpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
CisgICAgICAgICAgICBwcmludGYoIiVzYXJnJXUoJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAi
Iiwgb3BlcmFuZCAtIGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIG5hbWVPZlZhcmlhYmxlQWNj
ZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
cHJpbnRmKCIlc3IldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGxvY2FsKTsKKyAgICAgICAg
ICAgIHByaW50ZigiJXNyJXUoJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgb3BlcmFuZCwg
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKQEAg
LTE0NSw4ICsxODAsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
CiAgICAgcHJpbnRmKCIpIik7CiAKICAgICBpZiAoIXNraXBwZWQpIHsKLSAgICAgICAgaWYgKG5v
ZGUuaGFzTG9jYWwoKSkKLSAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwgcHJl
ZGljdGlvblRvU3RyaW5nKGdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKSkpOworICAgICAgICBp
ZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIHByaW50ZigiICBw
cmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICBlbHNlIGlmIChub2RlLmhhc1Zhck51bWJlcigp
KQogICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJp
bmcoZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKSkpOwogICAgICAgICBl
bHNlIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKQEAgLTIwNCwxMCArMjM5LDEwIEBAIHZvaWQg
R3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1
bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
aWYgKGV4ZWMpIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4o
ZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9wcmVkaWN0aW9ucy5udW1iZXJP
ZkFyZ3VtZW50cygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjpt
aW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudHMuc2l6ZSgp
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IG51bWJlck9m
QXJndW1lbnRzOyArK2FyZykKLSAgICAgICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3Vt
ZW50KGFyZywgcHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChhcmcgLSAxKSkpOwor
ICAgICAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnBy
ZWRpY3QocHJlZGljdGlvbkZyb21WYWx1ZShleGVjLT5hcmd1bWVudChhcmcgLSAxKSkpOwogICAg
IH0KICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKQEAgLTIyMCwxMCArMjU1LDEwIEBAIHZv
aWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgaWYgKCFwcm9m
aWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBtX3ByZWRpY3Rp
b25zLnByZWRpY3RBcmd1bWVudChhcmcsIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bigpKTsKKyAgICAgICAgYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOwogICAgICAgICAK
ICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiQXJndW1lbnQg
WyVsdV0gcHJlZGljdGlvbjogJXNcbiIsIGFyZywgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGlj
dGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKKyAgICAgICAgcHJpbnRmKCJBcmd1
bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0aW9uVG9TdHJpbmcoYXQo
bV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwog
I2VuZGlmCiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gOTYyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1l
c3BhY2UgREZHIHsKIAorLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0
ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50
KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQorCiB0eXBlZGVmIHVpbnQzMl90
IEJsb2NrSW5kZXg7CiAKIC8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFjayBhbnkg
ZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCkBAIC01Myw2ICs1NiwxMiBAQCBzdHJ1
Y3QgVmFyaWFibGVSZWNvcmQgewogICAgICAgICA6IHZhbHVlKE5vTm9kZSkKICAgICB7CiAgICAg
fQorICAgIAorICAgIHZvaWQgc2V0Rmlyc3RUaW1lKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
eworICAgICAgICBBU1NFUlQodmFsdWUgPT0gTm9Ob2RlKTsKKyAgICAgICAgdmFsdWUgPSBub2Rl
SW5kZXg7CisgICAgfQogCiAgICAgTm9kZUluZGV4IHZhbHVlOwogfTsKQEAgLTExMCw4ICsxMTks
MTAgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIGJlZ2luKGJlZ2luKQogICAgICAg
ICAsIGVuZChOb05vZGUpCiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwg
bV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fbG9jYWxzKG51bUxvY2FscykK
KyAgICAgICAgLCBtX2FyZ3VtZW50c0F0SGVhZChudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9s
b2NhbHNBdEhlYWQobnVtTG9jYWxzKQorICAgICAgICAsIG1fYXJndW1lbnRzQXRUYWlsKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX2xvY2Fsc0F0VGFpbChudW1Mb2NhbHMpCiAgICAgewogICAg
IH0KIApAQCAtMTI2LDggKzEzNywxMiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgYm9vbCBp
c09TUlRhcmdldDsKIAogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKLSAgICBW
ZWN0b3IgPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3IgPFZhcmlh
YmxlUmVjb3JkLCAxNj4gbV9sb2NhbHM7CisgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlUmVjb3Jk
LCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2PiBt
X2xvY2Fsc0F0SGVhZDsKKyAgICAKKyAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJn
dW1lbnRzQXRUYWlsOworICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRU
YWlsOwogfTsKIAogLy8gCkBAIC0xMzgsMTEgKzE1Myw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsK
IC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNv
dW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKIHB1YmxpYzoK
LSAgICBHcmFwaCh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykK
LSAgICAgICAgOiBtX3ByZWRpY3Rpb25zKG51bUFyZ3VtZW50cywgbnVtVmFyaWFibGVzKQotICAg
IHsKLSAgICB9Ci0KICAgICAvLyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZlcmVuY2VkLgogICAg
IHZvaWQgcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTcxLDE2ICsxODEsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3NbYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAgICAgCi0gICAgUHJlZGljdGlvblRyYWNr
ZXImIHByZWRpY3Rpb25zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zOwot
ICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3Qo
b3BlcmFuZCwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAogICAgIGJvb2wgcHJlZGljdEdsb2Jh
bFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3RHbG9iYWxWYXIodmFyTnVtYmVy
LCBwcmVkaWN0aW9uKTsKQEAgLTE5MCwxMSArMTkwLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAg
ICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCks
IHByZWRpY3Rpb24pOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0QnlJZDoK
ICAgICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkBAIC0yMTIs
MTEgKzIxMyw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFByZWRpY3RlZFR5
cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3By
ZWRpY3Rpb25zLmdldFByZWRpY3Rpb24ob3BlcmFuZCk7Ci0gICAgfQotICAgIAogICAgIFByZWRp
Y3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHZh
ck51bWJlcik7CkBAIC0yNDQsNyArMjQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAobm9kZVB0ci0+b3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAg
ICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG5vZGVQdHItPmxvY2FsKCkpOworICAgICAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgICAgIHJldHVybiBn
ZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsKICAgICAgICAgY2Fz
ZSBHZXRCeUlkOgpAQCAtMzI0LDYgKzMyMyw5IEBAIHB1YmxpYzoKIAogI2lmbmRlZiBOREVCVUcK
ICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKKyAgICAKKyAgICAvLyBU
aGlzIGlzIE8obiksIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciB2ZXJib3NlIGR1bXBzLgor
ICAgIGNvbnN0IGNoYXIqIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShWYXJpYWJsZUFjY2Vzc0Rh
dGEqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqKTsKQEAgLTMzMyw3ICszMzUsMTAgQEAgcHVibGljOgogICAgIFZlY3RvcjxN
ZXRob2RDaGVja0RhdGE+IG1fbWV0aG9kQ2hlY2tEYXRhOwogICAgIFZlY3RvcjxTdG9yYWdlQWNj
ZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERh
dGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CisgICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1
bWVudHM7CisgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFy
aWFibGVBY2Nlc3NEYXRhOwogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICB1bnNp
Z25lZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0
ZToKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDk2Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNDAgKzM5MywyMyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCiAgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBj
b2RlQmxvY2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOwogICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IGxhc3RMaXZlTG9jYWwgPSAwOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAg
ICAgICAgICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rp
b25zIGFjdGlvbmFibGVQcmVkaWN0aW9ucyhiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNp
emUoKSwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay5tX2Fy
Z3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRBcmd1bWVudChp
LCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhbbm9kZUluZGV4
XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52
YWx1ZSAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgbGFzdExpdmVMb2NhbCA9IGk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9j
ay5tX2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0g
Tm9Ob2RlKQorICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRWYXJpYWJs
ZShpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhbbm9kZUlu
ZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7Ci0gICAgICAgICAgICBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7Ci0gICAgICAg
ICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUg
IT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNl
dChpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+
bV9saXZlQXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGFzdExp
dmVMb2NhbCkgewotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFz
dExpdmVMb2NhbCArIDEpOwotICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVh
ckFsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDw9IGxhc3RMaXZlTG9jYWw7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2Nr
Lm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhckFsbCgpOworICAgICAgICBh
Y3Rpb25hYmxlUHJlZGljdGlvbnMucGFjaygpOworICAgICAgICAKKyAgICAgICAgZW50cnktPm1f
cHJlZGljdGlvbnMgPSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0oYmFzaWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiA5NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3
dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNp
bmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9y
bWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFw
aHMuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC0xMDgsNiArMTA5LDUx
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAorY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4g
eworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgICAgIDogbV9sb2NhbChz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCisgICAg
ICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKKyAgICAgICAgcmV0
dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBvcGVyYW5kKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7Cisg
ICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3
ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQg
c2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CisgICAgLy8gcHV0dGluZyB0aGVt
IGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UK
KyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50
LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAgUHJlZGljdGVkVHlwZSBtX3By
ZWRpY3Rpb247Cit9OworCiB0eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZsYWdzOwogI2RlZmlu
ZSBOb2RlVXNlQm90dG9tICAgICAgMHgwMAogI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgw
MQpAQCAtMjIzLDYgKzI2OSw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3MKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
UGhpLCAwKSBcCiAgICAgXAorICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4g
Ki9cCisgICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9y
IGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50
MzIpIFwKICAgICBtYWNybyhCaXRPciwgTm9kZVJlc3VsdEludDMyKSBcCkBAIC00NjIsMTUgKzUx
MSwzMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnROb2RlKGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CiAgICAgfQogICAgIAor
ICAgIGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
b3ApIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAg
ICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcCA9PSBHZXRMb2NhbCB8fCBvcCA9PSBTZXRMb2NhbDsKKyAgICAgICAgcmV0
dXJuIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgIH0KLQorICAgIAorICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwor
ICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGhhc0xvY2FsKCkpOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3RlciltX29w
SW5mbzsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAg
IH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyArMzUsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWlubGluZSBib29sIHByZWRp
Y3Rpb25Jc1ZhbGlkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgUHJl
ZGljdGVkVHlwZSB0eXBlKQotewotICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IG9ubHkg
bG9jYWwgdmFyaWFibGUgcHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQKLSAgICAvLyBvbiBT
ZXRMb2NhbC4KLSAgICAKLSAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlwZSkpCi0gICAgICAg
IHJldHVybiB2YWx1ZS5pc0ludDMyKCk7Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9u
KHR5cGUpKQotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKLSAg
ICAKLSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKLSAgICAgICAgcmV0dXJuIHZh
bHVlLmlzQm9vbGVhbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKQEAgLTY2LDcg
KzQ5LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogI2VuZGlm
CiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpOwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5
RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKGVu
dHJ5LT5tX2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CkBAIC05NSwyNiArNzcsMzQg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAgIGlu
dG8gYSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlz
IHRvIHNpbXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAgIFBy
ZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5wcmVkaWN0
aW9ucygpOwotICAgIAotICAgIGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKSA+
IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZB
cmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFyZ3VtZW50
cy5zaXplKCkgJiYgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5nZXQoaSkKLSAgICAgICAgICAgICYm
ICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHBy
ZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyAr
K2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5t
X3ByZWRpY3Rpb25zLmFyZ3VtZW50KGkpOworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0Fj
dGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KGkgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2UgYXJndW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwgYWN0aW9u
YWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQ
cmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbikp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOworICAgICAgICAgICAgcHJp
bnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAl
cy5cbiIsIGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxl
UHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAgICAgICAgaWYg
KGkgPCBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlVmFyaWFi
bGVzLmdldChpKQotICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEs
IGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rp
b25zLnZhcmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKKyAgICAgICAgQWN0aW9uYWJsZVByZWRp
Y3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOworICAg
ICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9u
KGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9u
VG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwg
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjksNyArMTE5LDcgQEAgdm9pZCogcHJl
cGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIGlmICghZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2Nv
ZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCi0gICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93
dGggZmFpbGVkLi5cbiIpOworICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ug
c3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9u
IDk2Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZp
bmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUg
IkFjdGlvbmFibGVQcmVkaWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw4ICsz
OSw3IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWdu
ZWQgbV9ieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0g
ICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKLSAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFi
bGVzOworICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOwogfTsKIAogaW5s
aW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBv
c3JFbnRyeURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk2Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDE0ICszMTksMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsK
LSAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0UHJlZGlj
dGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAg
aWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaC5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3QobV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC00NzIsNyArNDcyLDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdE9iamVjdFVua25vd24pOworICAg
ICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9wcmVkaWN0aW9uc1tub2RlLmNo
aWxkMSgpXTsKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CisgICAgICAgICAgICAgICAg
aWYgKHByZWRpY3Rpb24gJiB+UHJlZGljdE9iamVjdE1hc2spIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHJlZGljdGlvbiAmPSB+UHJlZGljdE9iamVjdE1hc2s7CisgICAgICAgICAgICAgICAgICAg
IHByZWRpY3Rpb24gfD0gUHJlZGljdE9iamVjdFVua25vd247CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNTcxLDE1ICs1NzgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUaHJvdzoKICAg
ICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhp
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgZ2V0
cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KLSAgICAgICAgY2FzZSBQ
aGFudG9tOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFu
eXRoaW5nLgorICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICBicmVhazsKICNlbHNl
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gOTYyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDIwIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFZh
bHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHsKLSAgICBmcHJpbnRmKG91dCwgIk5v
ZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBT
b3VyY2VOb3RTZXQ6CisgICAgICAgIGZwcmludGYob3V0LCAiTm90U2V0Iik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQs
ICJJblJlZ0ZpbGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJG
aWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkludDMyIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJ
bmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBWYWx1ZVJlY292ZXJ5Ojpk
dW1wKEZJTEUqIG91dCkgY29uc3QKQEAgLTE3MCw5ICsxODMsOSBAQCBPU1JFeGl0OjpPU1JFeGl0
KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOwogICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVu
dCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihvcGVyYW5kRm9yQXJndW1lbnQoYXJndW1lbnQpLCBqaXQtPm1fYXJndW1lbnRzW2Fy
Z3VtZW50XSk7CisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwogICAgIGZvciAodW5z
aWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJp
YWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcih2YXJpYWJsZSwgaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOworICAgICAg
ICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGpp
dC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTYzMSw3
ICs2NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsK
KyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdGlvbigpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlv
biBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCiAgICAgICAg
IGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CkBAIC03MDUsNyArNzE4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgfHwg
KCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpKSk7CiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5leHROb2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAKLSAgICAgICAgUHJlZGljdGVkVHlwZSBw
cmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7
CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
Z3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwpAQCAtNzI1LDEw
ICs3MzgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAg
ICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJp
ZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20g
cmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAg
ICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZSgpOworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBUaGlz
IGlzIGEgbm8tb3A7IGl0IGp1c3QgbWFya3MgdGhlIGZhY3QgdGhhdCB0aGUgYXJndW1lbnQgaXMg
YmVpbmcgdXNlZC4KKyAgICAgICAgLy8gQnV0IGl0IG1heSBiZSBwcm9maXRhYmxlIHRvIHVzZSB0
aGlzIGFzIGEgaG9vayB0byBydW4gc3BlY3VsYXRpb24gY2hlY2tzCisgICAgICAgIC8vIG9uIGFy
Z3VtZW50cywgdGhlcmVieSBhbGxvd2luZyB1cyB0byB0cml2aWFsbHkgZWxpbWluYXRlIHN1Y2gg
Y2hlY2tzIGlmCisgICAgICAgIC8vIHRoZSBhcmd1bWVudCBpcyBub3QgdXNlZC4KKyAgICAgICAg
YnJlYWs7CisKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0
WG9yOgpAQCAtMjEzNCwxMCArMjE1NCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KEJhc2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNv
dXJjZSgpOworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVu
dHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2Fy
Z3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUp
CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3Rl
ckZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVl
U291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1fdmFy
aWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAg
ICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3Jh
cGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAg
IH0KKyAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CiAKQEAgLTIyMTAsOSArMjI0NCwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRl
eCk7CiAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0g
PSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7ICsraSkgewogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1YWxSZWdpc3Rlciko
bV9qaXQuY29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7Ci0gICAgICAgIFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbih2aXJ0dWFs
UmVnaXN0ZXIpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5n
cmFwaCgpW21faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rlciks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAgICAgZWxzZSBpZiAoaXNB
cnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIyMzYsMTIzICsyMjc2LDEzMSBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50
IG9wZXJhbmQsIGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK1ZhbHVlUmVjb3Zlcnkg
U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNl
JiB2YWx1ZVNvdXJjZSkKIHsKLSAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpIHsKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiBpc0ludDMyUHJlZGljdGlvbihtX2ppdC5n
cmFwaCgpLmdldFByZWRpY3Rpb24ob3BlcmFuZCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgc3dp
dGNoICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6
CiAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsK
LSAgICB9CisgICAgICAgIAorICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMy
KCk7CiAKLSAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkp
Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlND
b25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIGNhc2UgSGF2ZU5vZGU6IHsK
KyAgICAgICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZK
U0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAg
ICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgLy8gSXQn
cyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9k
ZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQg
dG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIAot
ICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgo
KV07Ci0gICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgIC8vIEl0
J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5v
ZGUsIG9yIG9wZXJhbmQsCi0gICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8g
bWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KLSAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLSAgICAKLSAgICBHZW5lcmF0
aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdp
c3RlcigpXTsKLSAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4
KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKLSAgICAgICAgLy8gVHJ5IHRvIHNlZSBp
ZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVl
IHdlIHdhbnQuCi0gICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lv
biBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKLSAgICAgICAgLy8gICAgdGhl
biBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2
ZSBwZXJmb3JtZWQgYQotICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55
d2F5LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgotICAgICAgICAvLwot
ICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcg
bGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcwotICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIs
IHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIK
LSAgICAgICAgLy8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0
aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQKLSAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21l
IHJlbWFpbmluZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQotICAg
ICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24g
b2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKLSAgICAgICAgLy8gICAgdGhlbiB0aGUg
b25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQg
bnVtYmVyCi0gICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5v
ZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cwotICAgICAgICAvLyAgICBhbHRl
cm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmlu
ZyB1c2VzIG9mCi0gICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEg
VUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikg
ewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOwot
ICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVy
KCldOwotICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUlu
ZGV4KCkgPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2
YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJU
b051bWJlckluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlv
bkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAg
ICAgICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ap
IHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVRvRG91YmxlOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVU
b0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAg
ICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBHZW5lcmF0aW9uSW5mbyog
aW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsK
KyAgICAgICAgaWYgKCFpbmZvUHRyLT5hbGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9
IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gc2VlIGlm
IHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUg
d2Ugd2FudC4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkg
bGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQorICAgICAg
ICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUg
dmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQgYQorICAgICAgICAgICAgLy8gICAgVmFsdWVUb051
bWJlciBjb252ZXJzaW9uIGFueXdheS4gVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051
bWJlci4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3
aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcwor
ICAgICAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBp
ZiB0aGVyZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCisgICAgICAgICAgICAvLyAgICBhbmQgYSBW
YWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVz
ZSBpdAorICAgICAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmluZyB1c2VzIHdv
dWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQorICAgICAgICAgICAgLy8gICAgb3Ro
ZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIEludDMyLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhl
IHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgICAgIC8vICAgIHRoZW4gdGhlIG9u
bHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51
bWJlcgorICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRl
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92
ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKKyAgICAgICAg
ICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291
bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVQ
dHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAm
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9n
ZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAg
ICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUlu
ZGV4KQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZVRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIg
PCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZv
Lm5vZGVJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVj
a2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJl
ckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRv
TnVtYmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7Ci0gICAgICAgICAgICBpZiAodmFsdWVU
b051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9
IHZhbHVlVG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMklu
ZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9J
bnQzMkluZGV4OwotICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlcklu
ZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWVUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4OworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1Vz
ZV07Ci0gICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHIt
PnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxp
dmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7Ci0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1Vz
ZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFw
aCgpW25vZGVJbmRleFRvVXNlXTsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dl
bmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0g
bm9kZUluZGV4VG9Vc2UpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGpzVW5kZWZpbmVkKCkpOwotICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICB9CiAgICAgCi0gICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworICAgICAgICBB
U1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CiAKLSAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKLSAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lz
dGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6aW5QYWlyKGluZm9QdHItPnRhZ0dQUigpLCBpbmZvUHRyLT5wYXlsb2FkR1BSKCkpOwot
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9Q
dHItPnJlZ2lzdGVyRm9ybWF0KCkpOwotICAgIH0KLSAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0
ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgICAgIGlmIChp
bmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mb1B0ci0+dGFnR1BSKCksIGluZm9QdHIt
PnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIo
aW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQorICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsK
ICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eSgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3ZlcnkoKTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgIH0K
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk2Mjk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NSw3ICsxNTUsMjAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SQogI2lmbmRlZiBOREVCVUcKIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSog
b3V0KSBjb25zdAogewotICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7
CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJjZU5vdFNldDoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWYWx1ZUlu
UmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYo
b3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAg
ICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdApA
QCAtMjAzLDkgKzIxNiw5IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
Y2gKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmRGb3JBcmd1
bWVudChhcmd1bWVudCksIGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKKyAgICAgICAgbV9h
cmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1f
YXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZh
cmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAgICAgICBtX3Zhcmlh
Ymxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhcmlhYmxlLCBq
aXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7CisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxl
XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJs
ZV0pOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNzIyLDcgKzczNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEdldExvY2FsOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1faml0Lmdy
YXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVu
IGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJl
ZGljdE5vbmUpIHsKQEAgLTc5Nyw3ICs4MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNvZGVJbmRleEZvck9T
UiAmJiAhbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKICAgICAgICAgbV9i
eXRlY29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5n
cmFwaCgpLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigp
OwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CkBAIC04MjAsOSArODMzLDE2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIC8vIEluZGlj
YXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBv
ZgogICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90
aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZSgpOworICAgICAg
ICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291
cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9
CisgICAgICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoaXMgaXMgYSBu
by1vcDsgaXQganVzdCBtYXJrcyB0aGUgZmFjdCB0aGF0IHRoZSBhcmd1bWVudCBpcyBiZWluZyB1
c2VkLgorICAgICAgICAvLyBCdXQgaXQgbWF5IGJlIHByb2ZpdGFibGUgdG8gdXNlIHRoaXMgYXMg
YSBob29rIHRvIHJ1biBzcGVjdWxhdGlvbiBjaGVja3MKKyAgICAgICAgLy8gb24gYXJndW1lbnRz
LCB0aGVyZWJ5IGFsbG93aW5nIHVzIHRvIHRyaXZpYWxseSBlbGltaW5hdGUgc3VjaCBjaGVja3Mg
aWYKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIG5vdCB1c2VkLgorICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CkBAIC0yMjAxLDEwICsyMjIxLDI0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2ppdC5i
cmVha3BvaW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291
cmNlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIEFTU0VSVCht
X2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1
ZTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9u
KG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9j
ay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92
YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5v
Tm9kZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0g
VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKICAgICBtX2xhc3RT
ZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICBtX2J5dGVj
b2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAK
QEAgLTIyNzUsOSArMjMwOSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50
VHlwZXMoCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJ
blJlZ2lzdGVyRmlsZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
UmVnaXN0ZXJGaWxlKTsKKyAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVC
bG9jaygpLT5tX251bVBhcmFtZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29kZUJsb2NrKCktPnRo
aXNSZWdpc3RlcigpICsgaSk7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9
IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpW21faml0LmdyYXBoKCku
bV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKSB7CkBAIC0yMzAwLDEyMSArMjM0MCwxMjkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlUmVjb3ZlcnkgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kLCBjb25zdCBWYWx1
ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCiB7Ci0g
ICAgaWYgKCF2YWx1ZVNvdXJjZS5pc1NldCgpKSB7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXhGb3JPU1IgJiYgaXNJbnQzMlByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9u
KG9wZXJhbmQpKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uua2lu
ZCgpKSB7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgogICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1f
aml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQotICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3Vy
Y2Uubm9kZUluZGV4KCkpKTsKKyAgICAgICAgCisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxl
OgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkSW50MzIoKTsKKyAgICAgICAgCisgICAgY2FzZSBIYXZlTm9kZTogeworICAgICAgICBp
ZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQo
dmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAKKyAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICAgICAgaWYgKCFu
b2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAvLyBJdCdzIGxlZ2l0aW1h
dGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVy
YW5kLAorICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRo
ZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgCi0gICAgTm9kZSog
bm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKLSAgICBp
ZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgLy8gSXQncyBsZWdpdGlt
YXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3Bl
cmFuZCwKLSAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBH
QyBoYXBweSBhZnRlciB0aGUgT1NSLgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotICAgIAotICAgIEdlbmVyYXRpb25JbmZvKiBp
bmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwot
ICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1
ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlz
IGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4K
LSAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2
YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQotICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5z
IHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1l
ZCBhCi0gICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMs
IHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNp
b24gb2YgdGhlIHZhbHVlIGlzCi0gICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBj
YW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgotICAgICAgICAv
LyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9O
dW1iZXIgYmVjYXVzZSBpdAotICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5n
IHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCi0gICAgICAgIC8vICAg
IG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFs
dWUgaXMgYSBVSW50MzJUb051bWJlcgotICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFp
bmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKLSAg
ICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAv
LwotICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBi
ZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCi0gICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlz
IHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YK
LSAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50
ZXJtZWRpYXRlLgotICAgICAgICAKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7Ci0gICAgICAgICAg
ICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGluZm9Q
dHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAg
ICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBu
b2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVU
b051bWJlckluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQz
MkluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5k
ZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXpl
KCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpbmZvLmFsaXZlKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0Lmdy
YXBoKClbaW5mby5ub2RlSW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
VW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVl
VG9Eb3VibGU6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8u
bm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRl
eCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQz
MlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0g
Jm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICBp
ZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3Vy
Y2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMg
YW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50Lgor
ICAgICAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNp
b24gb2YgdGhlIHZhbHVlIGlzIGEgVmFsdWVUb051bWJlciBub2RlCisgICAgICAgICAgICAvLyAg
ICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3Vs
ZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZl
cnNpb24gYW55d2F5LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRo
ZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgICAg
ICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlz
IGJvdGggYSBWYWx1ZVRvSW50MzIKKyAgICAgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1i
ZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAg
ICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBj
b252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgICAgICAvLyAgICBvdGhlcnMgd291bGQg
aGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
VUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMg
YSBVSW50MzJUb051bWJlcgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5p
bmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAg
ICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5v
ZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAg
YWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1h
aW5pbmcgdXNlcyBvZgorICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5l
IHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VUludDMyVG9OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
bm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFw
aCgpW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25J
bmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
b1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
VG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVU
b0ludDMySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRv
TnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJh
dGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUlu
ZGV4KCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4
KCldOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2
YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVl
VG9Eb3VibGU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBp
bmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVUb0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKLSAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051
bWJlckluZGV4OwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9O
b2RlKQotICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7
Ci0gICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAg
ICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgICAg
IGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7Ci0gICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRvVXNlXTsKLSAgICAg
ICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJl
Z2lzdGVyKCldOwotICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGlu
Zm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUlu
ZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbklu
Zm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhU
b1VzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghZm91
bmQpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0K
ICAgICAKLSAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CisgICAgICAgIEFTU0VSVChpbmZv
UHRyLT5hbGl2ZSgpKTsKIAotICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9IERh
dGFGb3JtYXROb25lKSB7Ci0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09
IERhdGFGb3JtYXREb3VibGUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5G
UFIoaW5mb1B0ci0+ZnByKCkpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIo
aW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOwotICAgIH0KLSAgICBp
ZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgaWYg
KGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAg
ICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigp
KTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIo
KSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
Zm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgfQogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NjI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjYgKzY2
LDUzIEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fc3JjOwogfTsKIAorZW51bSBWYWx1ZVNvdXJj
ZUtpbmQgeworICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAg
IEludDMySW5SZWdpc3RlckZpbGUsCisgICAgSGF2ZU5vZGUKK307CisKIGNsYXNzIFZhbHVlU291
cmNlIHsKIHB1YmxpYzoKICAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgo
Tm9Ob2RlKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5v
dFNldCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1
ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJ
bmRleEZyb21LaW5kKHZhbHVlU291cmNlS2luZCkpCiAgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpICE9IFNvdXJjZU5vdFNldCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUp
OwogICAgIH0KICAgICAKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQogICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKICAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVT
b3VyY2UgZm9yUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAg
ICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBWYWx1
ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1Nl
dCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOwor
ICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5v
dFNldDsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKICAgICB9
CiAgICAgCiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOwogICAg
ICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CiAgICAgfQogICAgIApAQCAtOTQsNiArMTIxLDIwIEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZUluZGV4IG5v
ZGVJbmRleEZyb21LaW5kKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQgPj0gU291cmNlTm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7CisgICAgICAgIHJl
dHVybiBOb05vZGUgLSBraW5kOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2VL
aW5kIGtpbmRGcm9tTm9kZUluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBraW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9kZSAtIG5vZGVJbmRl
eCk7CisgICAgICAgIGlmIChraW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihIYXZlTm9kZSkp
CisgICAgICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxWYWx1ZVNvdXJjZUtpbmQ+KGtpbmQpOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggbV9u
b2RlSW5kZXg7CiB9OwogICAgIApAQCAtNTE3LDcgKzU1OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW29wMV07CiAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCkgewogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQ
cmVkaWN0aW9uKG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiBpc0FycmF5UHJlZGljdGlvbihub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6
CiAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CkBAIC01OTAsNyArNjMxLDcgQEAgcHJpdmF0
ZToKICAgICAKICAgICAvLyBUcmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBo
b2xkaW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQogICAgIC8vIG9wZXJh
bmQtaW5kZXhlZCB2YXJpYWJsZXMuCi0KKyAgICAKICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJj
ZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVTb3Vy
Y2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOwpAQCAtNjIzLDExICs2NjQsMTEgQEAgcHJp
dmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICB1aW50MzJfdCBtX2J5dGVjb2Rl
SW5kZXhGb3JPU1I7CiAgICAgCi0gICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihpbnQgb3BlcmFuZCwgY29uc3QgVmFsdWVTb3VyY2UmKTsKKyAgICBWYWx1ZVJlY292ZXJ5
IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1
ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQsIHZhbHVlU291cmNl
Rm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcih2YWx1ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KIH07CiAKQEAgLTg1
Miw3ICs4OTMsNyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAg
ICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKICAgICAsIG1fY29tcGlsZU9rYXkodHJ1
ZSkKICAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQot
ICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAgLCBtX3Zh
cmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQo
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZv
ck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBhY2tlZEludFZlY3Rvcl9oCisjZGVmaW5lIFBhY2tlZEludFZl
Y3Rvcl9oCisKKyNpbmNsdWRlICJCaXRWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFRoaXMgY2xhc3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIHdo
ZXJlIHRob3NlCisvLyBpbnRlZ2VycyBoYXZlIG9ubHkgYSBoYW5kZnVsIG9mIGJpdHMgZWFjaC4g
SXQgaXMgbm90IG1lYW50IHRvIGJlCisvLyBlZmZpY2llbnQgaW4gdGltZSwgYnV0IG9ubHkgaW4g
c3BhY2UuIChUaG91Z2ggbWFraW5nIGl0IGVmZmljaWVudAorLy8gaW4gdGltZSBmb3IgcG93ZXIt
b2YtMiB2YWx1ZXMgb2YgYml0Q291bnQgd291bGQgbm90IGJlIGRpZmZpY3VsdC4pCisvLyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGZvciBzaWduZWQgdHlwZXMsIGlm
IHlvdQorLy8gYXJlIHJlbHlpbmcgb24gdGhlIHNpZ24gYmVpbmcgcHJlc2VydmVkLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBiaXRDb3VudD4KK2NsYXNzIFBhY2tlZEludFZlY3Rv
ciB7CitwdWJsaWM6CisgICAgUGFja2VkSW50VmVjdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChiaXRDb3VudCk7CisgICAgICAgIEFTU0VSVChiaXRDb3VudCA8IHNpemVvZih2b2lkKikgKiA4
KTsKKyAgICB9CisgICAgCisgICAgUGFja2VkSW50VmVjdG9yKGNvbnN0IFBhY2tlZEludFZlY3Rv
ciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzKG90aGVyLm1fYml0cykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFBhY2tlZEludFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFBhY2tlZEludFZlY3Rv
ciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2JpdHMgPSBvdGhlci5tX2JpdHM7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5zaXplKCkgLyBiaXRDb3VudDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1JbnRzKQorICAgIHsKKyAgICAgICAgbV9i
aXRzLmVuc3VyZVNpemUobnVtSW50cyAqIGJpdENvdW50KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZXNpemUoc2l6ZV90IG51bUludHMpCisgICAgeworICAgICAgICBtX2JpdHMucmVzaXplKG51
bUludHMgKiBiaXRDb3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQorICAg
IHsKKyAgICAgICAgbV9iaXRzLmNsZWFyQWxsKCk7CisgICAgfQorICAgIAorICAgIFQgZ2V0KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBiaXRDb3VudDsg
KytzdWJJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0IDw8PSAxOworICAgICAgICAgICAgcmVz
dWx0IHw9IChtX2JpdHMuZ2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCkgPyAxIDogMCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHJlc3VsdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBpbmRleCwgVCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIC8vIERvIGFyaXRobWV0aWMgdXNpbmcgdWludHB0cl90LCBiZWNhdXNlICgxKSB3ZSBrbm93
IHdoYXQgaXQgaXMKKyAgICAgICAgLy8gKFQgbWlnaHQgYmUgYW4gZW51bSkgYW5kICgyKSBpdCdz
IHRoZSBsYXJnZXN0IGludGVnZXIgdHlwZSB0aGF0CisgICAgICAgIC8vIGlzIGxpa2VseSB0byBw
ZXJmb3JtIGRlY2VudGx5IHdlbGwuCisgICAgICAgIHVpbnRwdHJfdCBteVZhbHVlID0gc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBQcmVsaW1pbmFy
eSBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgbm90IG91dCBvZiByYW5nZS4KKyAgICAg
ICAgQVNTRVJUKChteVZhbHVlICYgbWFzaygpKSA9PSBteVZhbHVlKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3VudDsgc3ViSW5kZXgtLSA+IDA7KSB7
CisgICAgICAgICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCwgISEo
bXlWYWx1ZSAmIDEpKTsKKyAgICAgICAgICAgIG15VmFsdWUgPj49IDE7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayB0aGF0IHdlIHN0b3JlZCB3aGF0
IHRoZSB1c2VyIHRob3VnaHQgd2UKKyAgICAgICAgLy8gc3RvcmVkLgorICAgICAgICBBU1NFUlQo
Z2V0KGluZGV4KSA9PSB2YWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICAvLyBUaGlzIHJldHVy
bnMgdGhlIG1hc2ssIGFuZCBpcyBjYXJlZnVsIHRvIG5vdCBzdGVwIG9uIHRoZSB3cmFwLWFyb3Vu
ZAorICAgIC8vIHNlbWFudGljcyBvZiB0aGUgc2hpZnQgYW1vdW50ICgxIDw8IDMyIGlzIDEgc2lu
Y2UgMzIgd3JhcHMgdG8gMCkuIFRoZXJlCisgICAgLy8gaXMgdGhlIHNlcGFyYXRlIHF1ZXN0aW9u
IG9mIHdoeSB5b3Ugd291bGQgZXZlciB1c2UgdGhpcyB0byBzdG9yZSAzMi1iaXQKKyAgICAvLyBv
ciA2NC1iaXQgdmFsdWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gaGF2ZSB0aGlzIHdv
cmsgYXMgZXhwZWN0ZWQKKyAgICAvLyBpbiBzdWNoIHNpdHVhdGlvbnMgcmVnYXJkbGVzcy4KKyAg
ICBzdGF0aWMgdWludHB0cl90IG1hc2soKSB7IHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90
PigyKSA8PCAoYml0Q291bnQgLSAxKSkgLSAxOyB9CisgICAgICAgICAgICAgICAKKyAgICAvLyBT
dG9yZXMgaW50ZWdlcnMgYml0IGJ5IGJpdCBpbiBiaWcgZW5kaWFuLgorICAgIEJpdFZlY3RvciBt
X2JpdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYWNrZWRJbnRW
ZWN0b3I7CisKKyNlbmRpZiAvLyBQYWNrZWRJbnRWZWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1VuaW9uRmluZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvVW5pb25GaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1VuaW9uRmluZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFVuaW9u
RmluZF9oCisjZGVmaW5lIFVuaW9uRmluZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBVbmlvbkZpbmQgY2xhc3MgY2FuIGJlIHVzZWQg
dG8gY29tcHV0ZSBkaXNqb2ludCBzZXRzIHVzaW5nIHRoZQorLy8gZGlzam9pbnQtc2V0IGZvcmVz
dCBkYXRhIHN0cnVjdHVyZS4gRWFjaCBVbmlvbkZpbmQgaW5zdGFuY2UgaXMgYQorLy8gbm9kZSBp
biB0aGUgZm9yZXN0LiBUeXBpY2FsbHkgeW91IHVzZSBpdCBieSB1c2luZyBVbmlvbkZpbmQgYXMg
YQorLy8gc3VwZXJjbGFzczoKKy8vCisvLyBjbGFzcyBNZW1iZXJPZlNldDogcHVibGljIFVuaW9u
RmluZDxNZW1iZXJPZlNldD4geyAuLi4gfQorLy8KKy8vIENhbGxpbmcgeC0+ZmluZCgpIGdpdmVz
IHlvdSBhIE1lbWJlck9mU2V0KiB0aGF0IHJlcHJlc2VudHMgdGhlCisvLyBkaXNqb2ludCBzZXQg
dGhhdCB4IGJlbG9uZ3MgdG8uIENhbGxpbmcgeC0+dW5pZnkoeSkgdW5pZmllcyB4J3MKKy8vIHNl
dCB3aXRoIHkncyBzZXQsIGFuZCBlbnN1cmVzIHRoYXQ6CisvLworLy8geC0+ZmluZCgpID09IHkt
PmZpbmQoKQorLy8KKy8vIGFuZCB0aGF0OgorLy8KKy8vIGEtPmZpbmQoKSA9PSBiLT5maW5kKCkK
Ky8vCisvLyBmb3IgYW55IGEsIGIgaWYgcHJpb3IgdG8gdGhlIGNhbGwgdG8geC0+dW5pZnkoeSks
IHdlIHdvdWxkIGhhdmUKKy8vIGhhZDoKKy8vCisvLyBhLT5maW5kKCkgPT0geAorLy8gYi0+Zmlu
ZCgpID09IHkKKy8vCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGFsbW9zdCBhbW9ydGl6ZWQg
TygxKSwgYnV0IGNvdWxkIGJlIHdvcnNlCisvLyBpbiB1bmxpa2VseSBwYXRob2xvZ2ljYWwgY2Fz
ZXMuIEl0IGZhdm9ycyBoYXZpbmcgYSBub24tcmVjdXJzaXZlCisvLyBzaW5nbGUgcGFzcyBpbXBs
ZW1lbnRhdGlvbiBvZiB1bmlmeSgpIGFuZCBmaW5kKCkgb3ZlciBlbnN1cmluZyB0aGUKKy8vIHRo
ZW9yZXRpY2FsIE8oSW52ZXJzZUFja2VybWFubltuXSkgYW1vcnRpemVkIGJvdW5kLCB3aGljaCBp
cyBtdWNoCisvLyBjbG9zZXIgdG8gYW1vcnRpemVkIE8oMSkuCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBVbmlvbkZpbmQgeworcHVibGljOgorICAgIFVuaW9uRmluZCgpCisgICAgICAg
IDogbV9wYXJlbnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFQqIGZpbmQoKQorICAgIHsK
KyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBUKiBu
ZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gcmVzdWx0LT5tX3BhcmVudDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAh
PSB0aGlzKQorICAgICAgICAgICAgbV9wYXJlbnQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdW5pZnkoVCogb3RoZXIpCisgICAgeworICAg
ICAgICBUKiBhID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5maW5kKCk7CisgICAgICAgIFQqIGIg
PSBvdGhlci0+ZmluZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFhLT5tX3BhcmVudCk7
CisgICAgICAgIEFTU0VSVCghYi0+bV9wYXJlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGEg
PT0gYikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGEtPm1fcGFyZW50
ID0gYjsKKyAgICB9Citwcml2YXRlOgorICAgIFQqIG1fcGFyZW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VW5pb25GaW5kOworCisjZW5kaWYgLy8gVW5pb25GaW5k
X2gK
</data>
<flag name="review"
          id="106273"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>